繁体   English   中英

ZeroMq PUB / SUB模式无法正常工作

[英]ZeroMq PUB/SUB pattern not working properly

我的要求

  1. 高吞吐量,每秒至少5000条消息
  2. 交货顺序不重要
  3. 显而易见,发布者不应该等待响应,也不必关心订阅者是否在监听

背景

我为每个消息创建了一个新线程,因为如果不这样做,消息生成部分将加快发送线程的速度并且消息丢失,因此为每个消息使用线程似乎是正确的方法

问题:

问题在于,以某种方式开始发送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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM