2013-08-05 54 views
1

方法

我建立與ZeroMq異步IM /聊天應用,只是作爲一個學習鍛鍊,使用以下方法異步即時消息聊天。如何實現與ZeroMq

服務器使用兩個ROUTER插座,類似於lbbroker.java,從incoming讀取和寫入outgoing,而操縱信封用於遞送到預期的接收器。

客戶端使用socket.setIdentity()設置唯一標識,並使用PULL和PUSH套接字(而不是REQ/REP)異步發送和接收聊天消息。我已經構建並測試了代碼,一切似乎都正常。

Async Chat

問題

  • 是利用PUSH的/在路由器中拉一個有效的方法?

  • 爲什麼聊天客戶端在脫落時無法連接,然後重新連接?

如果Sally斷開連接然後重新連接,她將無法再接收聊天消息,此時Sally變得無法訪問。在調試服務器之後,我確認它肯定會發送帶有正確信封的消息以便發送消息。我還使用outgoing.setRouterMandatory(true)來確保服務器沒有丟棄未處理的消息,但沒有發生錯誤。

回答

2

經過進一步研究,雖然PUSH和PULL套接字與ROUTER協同工作,但根據ZeroMq規範,它們不是有效的套接字組合。

客戶端的DEALER套接字是更好的方法。 DEALER支持雙向消息傳輸,基本上完成PUSH和PULL的工作,但只有一個套接字。

我在Github上開始討論這個問題,它包含一些使用DEALER的基於代理模式的示例代碼。

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