2014-06-24 82 views
0

當使用SUB型ØMQ插槽,可以使用主題在ZeroMQ REP插座

sub_socket.setsockopt_string(zmq.SUBSCRIBE, 'topic') 

是相同的可能,還REP插槽,允許工人只處理特定的主題,讓其他主題,以不同的工人?

我很害怕,這是不可能的,引用http://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/patterns/pubsub.html

在ØMQ的當前版本,過濾發生在用戶側,而不是發行方。

但是,我仍在問,是否有一些技巧可以實現,因爲這樣的功能會對我的基礎架構產生巨大的影響。

回答

1

沒有。我可以假設你有一個REQDEALER服務器套接字將工作發送給REP工作人員,然後將完成的工作回覆給服務器?而且您正在尋找一種方法讓您的服務器與特定客戶端通信,而不是以循環方式傳遞任務?

不能這樣做。 See here,那些套接字是唯一的,總是循環。如果要與特定的客戶端通信,則必須擁有隻與該客戶端通信的套接字,或者必須從客戶端開始通信(切換套接字配對,以便工作者請求準備好的任何工作以及服務器迴應它,然後工作人員創建一個新的請求與完成的工作)。做其他事情變得更加複雜。

+0

你的假設絕對正確,這正是我想要做的。好的,謝謝你的明確答案,好像我必須爲每個主題實例化單獨的''DEALER':( – Tregoreg

+0

是否有一個原因,通信必須從服務器啓動?請求/路由器,並開始從該工作人員可能會大大簡化您的架構,[ZMQ指南](http://zguide.zeromq.org/page:all)中有幾個示例。 – Jason

+0

我希望我沒有使用不正確的術語 - 我是使用這種拓撲結構:https://github.com/imatix/zguide/raw/master/images/fig17.png。 溝通從客戶端開始,但不幸的是,我有幾個主題,每個主題都需要很多的RAM,因此在不同的機器上需要專門的工作人員(或服務,如果遵循圖的術語),如果我可以使用服務訂閱主題,事情會很好,很簡單,但因爲你說這是不合適的我必須爲每個主題實例化單獨的''ROUTER'''''DEALER''代理。 – Tregoreg