我是靠谱客的博主 清秀皮皮虾,最近开发中收集的这篇文章主要介绍zmq是基于tcp实现的吗_不知道有人使用 zmq/zeromq 公共库么?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

以下为官方给出的 zmq c++多线程 demo ,我的项目也是从这个改版出来的,但是我遇到一个非常严重的问题,当我有多个客户端同时访问的时候就出现了问题。

情况如下:

我们假设 A/B/C 三个客户端,同时发送 a/b/c 给服务器,服务器的工作就是把接收到的字符串完全返回,正常的话,客户端应该接收到的回复也是 a/b/c 。

但是我这里会出现的情况是,收到: a/a/c 或 b/b/c 等

也就是说,会把应该分来应该发送给 a 的,也发送给了 b ,同时 b 的那条就丢失了

这种情况有人遇到过么?

#include

#include

#include

#include

#include

#include

void *worker_routine (void *arg)

{

zmq::context_t *context = (zmq::context_t *) arg;

zmq::socket_t socket (*context, ZMQ_REP);

socket.connect ("inproc://workers");

while (true) {

// Wait for next request from client

zmq::message_t request;

socket.recv (&request);

std::cout << "Received request: [" << (char*) request.data() << "]" << std::endl;

// Do some 'work'

sleep (1);

// Send reply back to client

zmq::message_t reply (6);

memcpy ((void *) reply.data (), "World", 6);

socket.send (reply);

}

return (NULL);

}

int main ()

{

// Prepare our context and sockets

zmq::context_t context (1);

zmq::socket_t clients (context, ZMQ_ROUTER);

clients.bind ("tcp://*:5555");

zmq::socket_t workers (context, ZMQ_DEALER);

workers.bind ("inproc://workers");

// Launch pool of worker threads

for (int thread_nbr = 0; thread_nbr != 5; thread_nbr++) {

pthread_t worker;

pthread_create (&worker, NULL, worker_routine, (void *) &context);

}

// Connect work threads to client threads via a queue

zmq::proxy (clients, workers, NULL);

return 0;

}

最后

以上就是清秀皮皮虾为你收集整理的zmq是基于tcp实现的吗_不知道有人使用 zmq/zeromq 公共库么?的全部内容,希望文章能够帮你解决zmq是基于tcp实现的吗_不知道有人使用 zmq/zeromq 公共库么?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部