什么是python zeromq中的zmq.ROUTER和zmq.DEALER?

use*_*r27 15 sockets zeromq python-2.7

任何人都可以告诉zmq.sockets的类型是什么?

在什么情况下可以使用这些插座?

我需要的主要区别是zmq.DEALER,并zmq.ROUTER在Python zeroMQ?

哪种类型的插座可以使用这些插座?

Jan*_*sky 24

DEALER和ROUTER是插座,可以轻松扩展REQ/REP对.

在直接通信中,REQ和REP以阻塞方式进行通话.

路由器 - 接受来自REQ方面的请求

路由器能够接受请求,添加包含该被请求者信息的信封,并通过互连代码使该新消息可用于进一步处理.当响应返回时(在信封中),它可以将响应传递回被请求者.

经销商 - 与工人谈判 - 在REP方面

经销商关心工人.请注意,为了使整个解决方案可用,工作人员必须连接到经销商,而不是相反.

DEALER还允许与REP进行无阻塞连接.

某些连接代码将信封中的请求传递给DEALER.经销商管理向工人分发此类请求(没有信封),然后回复互连代码(再次在信封中).

互连代码

互连代码是在ROUTER和DEALER套接字之间混合消息.

最简单的版本是:http://zguide.zeromq.org/py:rrbroker

# Simple request-reply broker
#
# Author: Lev Givon <lev(at)columbia(dot)edu>

import zmq

# Prepare our context and sockets
context = zmq.Context()
frontend = context.socket(zmq.ROUTER)
backend = context.socket(zmq.DEALER)
frontend.bind("tcp://*:5559")
backend.bind("tcp://*:5560")

# Initialize poll set
poller = zmq.Poller()
poller.register(frontend, zmq.POLLIN)
poller.register(backend, zmq.POLLIN)

# Switch messages between sockets
while True:
  socks = dict(poller.poll())

  if socks.get(frontend) == zmq.POLLIN:
    message = frontend.recv_multipart()
    backend.send_multipart(message)

  if socks.get(backend) == zmq.POLLIN:
    message = backend.recv_multipart()
    frontend.send_multipart(message)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这是一个很简单的解释.我正在阅读伟大的书"节点:正确的方式",但他们的图表和经销商/路由器的解释有点难过,但是你清理了它. (2认同)