2012-08-25 32 views
0

我有以下任務:ZeroMQ服務器如何保持與所有客戶端的連接?

客戶端連接到1端口上的服務器(例如8080)。服務器應記住它們,並在完成計算後將結果發送給客戶端。在該服務器獲取一些結果後,再次將其發送給所有客戶端。等等。

服務器如何與所有客戶端保持連接?

回答

0

,我發現了一些代碼使用PUB \ SUB模型,並在此http://grokbase.com/t/zeromq/zeromq-dev/112q9934vg/nat-firewall-pub-sub-traversal與NAT的工作原理:

出版商連接,而不是結合:

import zmq 
ctxt = zmq.Context() 
pub = ctxt.socket(zmq.PUB) 
pub.connect("tcp://127.0.0.1:2000") 
while 1: 
pub.send(os.urandom(5)) 

用戶結合,而不是連接:

import zmq 
ctxt = zmq.Context() 
sub = ctxt.socket(zmq.SUB) 
sub.bind("tcp://127.0.0.1:2000") 
while 1: 
sub.rcv() 
1

您是否確實需要維護來自客戶端的所有連接?我認爲,「發佈/訂閱」消息模型將滿足所描述的條件。服務器應該「發佈」結果,客戶端應該「訂閱」這個更新。這樣的「服務器」最簡單的例子,你可以zguide代碼樣本中發現:wuserver.cpp

+0

我認爲PUP \ SUB模式,但我的服務器和客戶端可以在不同的坐網絡\後面的NAT。我認爲最健壯的解決方案是連接應該由客戶端發起。 – Alex

+1

我沒有看到不同的網絡等問題,使用pub/sub時你只需要在連接到套接字時設置特殊的連接類型。所以從「健壯」的角度來看沒有變化。 –

+0

你能提供更多關於「特殊連接類型」的信息嗎?我想我必須在所有有客戶端的網絡之間獲得PUB \ SUB代理。 – Alex

相關問題