2

方法

我正在使用 ZeroMq 构建一个异步 IM/聊天应用程序,作为一个学习练习,使用以下方法。

服务器使用两个 ROUTER 套接字,类似于lbbroker.java,读取incoming和写入outgoing,同时操作信封以传递给预期的接收者。

客户端使用 设置唯一标识socket.setIdentity(),并使用 PULL 和 PUSH 套接字而不是 REQ/REP 来异步发送和接收聊天消息。我已经构建并测试了代码,一切似乎都运行良好。

异步聊天

问题

  • 将 PUSH/PULL 与 ROUTER 一起使用是一种有效的方法吗?

  • 为什么聊天客户端在下线然后重新连接时变得无法访问?

如果 Sally 断开连接然后重新连接,Sally 将无法访问,她将无法再接收聊天消息。调试服务器后,我确认它肯定会发送带有正确信封的消息给 sally。我还曾经outgoing.setRouterMandatory(true)确保服务器不会丢弃无法寻址的消息,但不会引发错误。

4

1 回答 1

3

经过进一步研究,虽然 PUSH 和 PULL 套接字可与 ROUTER 一起使用,但根据 ZeroMq 规范,它们不是有效的套接字组合。

客户端的 DEALER 套接字是一种更好的方法。DEALER 支持双向消息传输,基本上完成 PUSH 和 PULL 的工作,但使用单个套接字。

我在 Github 上启动了一个线程来讨论这个问题,它包含一些使用 DEALER 的基于代理模式的示例代码。

https://github.com/zeromq/jeromq/issues/81

于 2013-09-23T16:23:44.993 回答