检查 ZeroMQ 服务器是否准备好与客户端对话的问题

问题描述 投票:0回答:1

我试图通过每 1 秒轮询一次服务器来查看

ZMQ_REP
服务器是否已准备好使用以下代码与客户端进行通信,但它永远不会返回
true
,尽管服务器已启动并正在运行以侦听客户端。

#include <iostream>
#include <zmq.hpp>
#include <chrono>

const std::string SERVER_ENDPOINT = "tcp://localhost:5555";

bool checkServer(const std::string& serverEndpoint) {
    zmq::context_t context(1);
    zmq::socket_t socket(context, zmq::SocketType::REQ);
    socket.connect(serverEndpoint);

    zmq::pollitem_t items [] = {{ socket, 0, ZMQ_POLLIN, 0 }};
    zmq::poll(items, 1, 1000); // 1 second timeout

    if (items[0].revents & ZMQ_POLLIN) {
        return true; // If server is available
    }
    return false;
}

int main() {
    bool serverAvailable = false;

    while (!serverAvailable) {
        std::cout << "Waiting for server..." << std::endl;
        serverAvailable = checkServer(SERVER_ENDPOINT);
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
    std::cout << "Server is available." << std::endl;

    return 0;
}

如果有人能够阐明这个问题,我将不胜感激。

c++ zeromq
1个回答
0
投票

在您的示例中,您创建一个

ZMQ_REQ
套接字,连接它,然后等待传入消息。这将不起作用,因为您的
ZMQ_REP
服务器(未看到代码)必须首先从
ZMQ_REQ
套接字接收消息才能发送。

作为示例,您可以将多个

ZMQ_REQ
客户端连接到一台
ZMQ_REP
服务器。在内部,每个客户端都有自己的路由 ID,服务器使用它来将回复定向到正确的客户端。

© www.soinside.com 2019 - 2024. All rights reserved.