方法
我正在使用 ZeroMq 构建一个异步 IM/聊天应用程序,作为学习练习,使用以下方法。
服务器使用两个ROUTER套接字,类似于lbbroker.java
,从传入
读取并写入传出
,同时操作信封交付给预定的接收者。
客户端使用 socket.setIdentity()
设置唯一身份,并使用 PULL 和 PUSH 套接字(而不是 REQ/REP)异步发送和接收聊天消息。我已经构建并测试了代码,一切似乎都工作正常。
问题
将 PUSH/PULL 与 ROUTER 一起使用是有效的方法吗?
为什么聊天客户端在断开连接然后重新连接时变得无法访问?
如果 Sally 断开连接然后重新连接,她将无法联系到,她将无法再接收聊天消息。调试服务器后,我确认它确实在向 sally 发送带有正确信封的消息。我还使用了 outgoing.setRouterMandatory(true) 来确保服务器不会丢弃不可寻址的消息,但不会引发任何错误。
最佳答案
经过进一步研究,虽然 PUSH 和 PULL 套接字可与 ROUTER 配合使用,但根据 ZeroMq 规范,它们不是有效的套接字组合。
客户端上的 DEALER 套接字是更好的方法。 DEALER 支持双向消息传输,基本上完成 PUSH 和 PULL 的工作,但使用单个套接字。
我在 Github 上发起了一个讨论该问题的帖子,其中包含一些使用 DEALER 的基于代理的模式的示例代码。
关于java - 如何使用ZeroMq实现异步即时通讯聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18048951/