方法
我正在使用 ZeroMq 构建一个异步 IM/聊天应用程序,作为一个学习练习,使用以下方法。
服务器使用两个 ROUTER 套接字,类似于lbbroker.java
,读取incoming
和写入outgoing
,同时操作信封以传递给预期的接收者。
客户端使用 设置唯一标识socket.setIdentity()
,并使用 PULL 和 PUSH 套接字而不是 REQ/REP 来异步发送和接收聊天消息。我已经构建并测试了代码,一切似乎都运行良好。
问题
将 PUSH/PULL 与 ROUTER 一起使用是一种有效的方法吗?
为什么聊天客户端在下线然后重新连接时变得无法访问?
如果 Sally 断开连接然后重新连接,Sally 将无法访问,她将无法再接收聊天消息。调试服务器后,我确认它肯定会发送带有正确信封的消息给 sally。我还曾经outgoing.setRouterMandatory(true)
确保服务器不会丢弃无法寻址的消息,但不会引发错误。