工人流程的ZeroMQ模式?

时间:2017-08-22 22:47:41

标签: python zeromq

我只是在学习0MQ,并且很难理解我的用例使用哪种模式。

我想创建一个多个客户端将连接的服务器。服务器将分发工作项,但每个工作项必须转到特定客户端。例如,如果服务器从牌组中挑选牌,我希望所有的心都能找到一个工人,所有的钻石都送给第二个工人等等。(工作项目实际上是来自会议的事件,我需要每个事件都是单个会话转到同一个工作人员。)

我使用什么模式,并且任何人都有任何代码显示(在Python中):

context = zqm.Context()
socket = context.socket(which type?)
socket.bind("tcp://*:5555")

#wait for 4 clients to connect (how?)

while True:
    card = GetNextCard()
    if card.suit == HEARTS:
        send card to Worker #1 (how?)
    if card.suit == DIAMONDS:
        send card to Workder #2
    etc...

基本上,如何跟踪已连接到服务器的客户端,并将工作项仅发送给连接的n个客户端中的一个?

1 个答案:

答案 0 :(得分:0)

欢迎来到分布式计算世界:

一旦开始连接到服务器,客户端可能会自我介绍,  假设服务器有

SUB_to_Ask4Connect = context.socket( zmq.SUB )
SUB_to_Ask4Connect.bind(                "tcp://A.B.C.D:P" )
SUB_to_Ask4Connect.setsockopt(       zmq.LINGER, 0 )
SUB_to_Ask4Connect.setsockopt(       zmq.SUBSCRIBE, "" )
#------------------------------------------------------ ready to .recv() from *

接下来,建立一个Client-accept-into-WorkerPoolPOLICY():

以便处理通过上述设置SUB_to_Ask4Connect套接字引入的正确的新人。

客户应该知道 -
的协议 a) .connect()到正确的地址
b) .send()他们适当的自我介绍 c)准备好.connect() / .bind()到其他套接字接口,按照 服务器的指示这样做
d).bind() - 准备好(或.connect() - 已知服务器端反向 - PUB,如果安全要求允许)接口可以进一步接收在WorkerPool分配/协调/发布策略期间,工作包特定和服务器端控制的详细信息和握手信号。

简单地说,不要指望单个原型能够满足ad-hoc工作包路由的这种分布式控制的所有要求,同时还具有就地动态ad-hoc客户端关联/发布。

这种分布式池系统控制平面对于这种动态生态系统来说比更简单的工作包物流平面(更简单的握手发生)更为重要和重要。

无论如何,你会喜欢这个新的宇宙 - 分布式实体出现/消失,并且(可能)以一种新的方式合作,而不是单一的体系结构和建筑师。

欢迎browse other ZeroMQ questions及答案,寻找更具吸引力的见解。