我在C中使用ZeroMQ 3.2。我遇到的问题是每当我尝试连接到某个远程端点时
void* context = zmq_ctx_new();
void* socket = zmq_socket(context, ZMQ_DEALER);
int rc = zmq_connect(socket, addr);
rc总是0,意味着每件事都是O.K.如API所述。即使没有服务器正在监听 。
我错过了什么吗?
答案 0 :(得分:4)
一切都是应有的。 ZeroMq的一个优点(取决于你如何看待它)是你在服务器启动后不必连接,也意味着即使与服务器的连接暂时关闭也可以连接。 ZeroMq将保持连接(请求)并重试。
zmq_connect()的Api文档指出:
对于大多数传输和套接字类型,连接不会立即执行,而是由ØMQ根据需要执行。因此,成功调用zmq_connect()并不意味着已建立或实际上可以建立连接。因此,对于大多数传输和套接字类型,绑定服务器套接字并将客户端套接字连接到它的顺序无关紧要。第一个例外是使用inproc:// transport时:必须在调用zmq_connect()之前调用zmq_bind()。第二个例外是ZMQ_PAIR套接字,它不会自动重新连接到端点。
如文档中所示,非响应/现有端点没有错误代码。基本上,只要你提供一个有效的端点(例如你没有达到每个进程的套接字限制),你应该是好的。
答案 1 :(得分:1)
正如指南所述:
客户端节点执行zmq_connect()后,连接就会存在 并且该节点可以开始将消息写入套接字。在某个阶段 (希望在消息排队之前他们开始得到这么多 丢弃,或客户端阻止),服务器活跃,做了 zmq_bind()和ØMQ开始传递消息。