【问题标题】:ZeroMQ pattern for Worker processes?工作进程的 ZeroMQ 模式?
【发布时间】:2017-08-24 17:09:03
【问题描述】:

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

【问题讨论】:

标签: python zeromq


【解决方案1】:

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

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

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_Ask4Connectsocket-interface引入。

客户应该知道 -
a) .connect() 的协议到正确的地址
b) .send() 正确的自我介绍c) 准备好 .connect() / .bind() 到额外的套接字接口,根据 服务器执行此操作的说明
d)有一个.bind()-ready(或.connect()-到已知的服务器端反向-PUB,如果安全要求允许)接口在 WorkerPool-assignment/coordination/release 策略期间接收更多详细信息和握手信号,它们是特定于工作包和服务器端控制的。

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

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

无论如何,您都会喜欢这个新的宇宙——分布式实体出现/消失并(可能)以一种新的方式进行合作,这对于单体架构和架构师来说并不常见。

请随时browse other ZeroMQ questions 和答案以找到更多启发性见解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2012-01-02
    相关资源
    最近更新 更多