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

标签 sockets python-2.7 zeromq

谁能告诉我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/

相关文章:

c - 是否有检查名为 sptr 的 sockaddr* 是否指向 ipv4 或 ipv6 地址的函数?

java - 是什么导致了我的 java.net.SocketException : Connection reset?

python - Tkinter,Python - 在不触发回调的情况下更改 slider 值

python - numpy.sum() 在大数组上给出奇怪的结果

python - 有什么简单的方法可以在 python 中稀疏地存储具有冗余模式的矩阵?

c++ - ZeroMQ - .lib 文件丢失

java - 聊天应用程序——哪种技术更适合在 Android 中实现聊天应用程序

c# - 套接字异常 : ErrorCode vs. 套接字错误代码

zeromq - C++ 示例的 ZMQ 编译问题

ZeroMQ 缓冲区大小与高水位线