如何实现与ZeroMq的异步即时消息聊天

时间:2013-08-05 00:10:10

标签: java chat zeromq instant-messaging

方法

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

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

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

Async Chat

问题

  • 使用带路由器的PUSH / PULL是一种有效的方法吗?

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

如果Sally断开连接然后重新连接,则Sally无法访问,她无法再接收聊天消息。在调试服务器之后,我确认它肯定会发送带有正确信封的消息给sally。我还使用了outgoing.setRouterMandatory(true)来确保服务器没有删除不可寻址的消息,但没有出现错误。

1 个答案:

答案 0 :(得分:3)

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

客户端的DEALER套接字是一种更好的方法。 DEALER支持双向消息传输,基本上可以完成PUSH和PULL的工作,但只需要一个插槽。

我在Github上开始讨论这个问题,它包含一些使用DEALER的基于代理的模式的示例代码。

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