[英]ZeroMq PUB/SUB pattern not working properly
我的要求 :
背景 :
我为每个消息创建了一个新线程,因为如果不这样做,消息生成部分将加快发送线程的速度并且消息丢失,因此为每个消息使用线程似乎是正确的方法
问题:
问题在于,以某种方式开始发送zMQ消息的线程不会被终止(不会退出/完成)。 以下行似乎有问题:
s_send(*client, request.str());
因为如果我将其删除,则线程终止正常,因此很可能是导致问题的这一行,我的第一个猜测是线程正在等待响应,但是zmq_PUB是否正在等待响应?
这是我的代码:
void *SendHello(void *threadid) {
long tid;
tid = (long) threadid;
//cout << "Hello World! Thread ID, " << tid << endl;
std::stringstream request;
//writing the hex as request to be sent to the server
request << tid;
s_send(*client, request.str());
pthread_exit(NULL);
}
int main() {
int sequence = 0;
int NUM_THREADS = 1000;
while (1) {
pthread_t threads[NUM_THREADS];
int rc;
int i;
for (i = 0; i < NUM_THREADS; i++) {
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL, SendHello, (void *) i);
pthread_detach(threads[i]);
sched_yield();
if (rc) {
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
//usleep(1000);
sleep(1);
}
pthread_exit(NULL);
//delete client;
return 0;
}
我的问题:
我是否需要调整zMQ套接字,以便PUB不等待答复我在做什么错?
编辑:
添加客户端定义:
static zmq::socket_t * s_client_socket(zmq::context_t & context) {
std::cout << "I: connecting to server." << std::endl;
zmq::socket_t * client = new zmq::socket_t(context, ZMQ_SUB);
client->connect("tcp://localhost:5555");
// Configure socket to not wait at close time
int linger = 0;
client->setsockopt(ZMQ_LINGER, &linger, sizeof (linger));
return client;
}
zmq::context_t context(1);
zmq::socket_t * client = s_client_socket(context);
但是zmq_PUB是否等待响应?
不,如果您的插座不是PUB插座并且达到高水位线,可能会是这种情况,但事实并非如此。 消息是否发送?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.