谁能告诉我zmq.sockets的类型是什么?
在什么情况下可以使用这些 socket ?
我需要的主要区别是python zeroMQ中的 zmq.DEALER
和 zmq.ROUTER
?
哪种类型的 socket 可以使用这些 socket ?
最佳答案
DEALER和ROUTER是套接字,可以轻松缩放REQ/REP对。
在直接通信中,REQ和REP处于阻塞状态。
ROUTER-接受请求-来自REQ端
路由器能够接受请求,添加关于该被请求者的信息的信封,并通过互连代码使此新消息可用于进一步处理。当响应返回时(包围),它可以将响应传递回被请求者。
经销商-与 worker 交谈-代表方
经销商关心 worker 。注意,要使整个解决方案可用, worker 必须连接到经销商,而不是相反。
经销商还允许与REP进行非阻塞连接。
一些连接代码将信封中的请求传递给经销商。经销商管理此类请求向工作人员的分发(不包含信封),随后再响应互连代码(再次位于信封中)。
互连码
互连代码用于在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)
关于sockets - 什么是python zeromq中的zmq.ROUTER和zmq.DEALER?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23581172/