繁体   English   中英

用于Worker进程的ZeroMQ模式?

[英]ZeroMQ pattern for Worker processes?

我只是在学习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个客户端之一?

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

客户端可以自我介绍,一旦开始连接到服务器,就假定服务器具有

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() -ready(或.connect() -to已知服务器端反向PUB ,如果安全性要求允许)接口期间接收进一步的细节和握手信号通知时,工作者池指派/协调/发布策略,这些策略特定于工作包并且由服务器端控制。

简而言之,不要期望一个单一的原型能够满足对这种临时工作包路由的分布式控制的所有需求,同时也要具有一个动态的临时客户关联/发布。

对于这样一个动态生态系统而言,这种分布式池系统控制平面比工作包装物流平面(握手更为简单)更为重要和重要。

无论如何,您都会喜欢这个新的Universe-分布式实体的出现/消失和(可能)以一种新的方式进行协作,这对于单层体系结构和建筑师而言并不常见。

随意浏览其他ZeroMQ问题和答案,以找到更多启发性的见解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM