如何解决用于接收和发送消息的 pyzmq 轮询器
如果我同时使用 POLLIN 和 POLLOUT 注册它,pyzmq 轮询器将不起作用。 if 条件无法捕获 POLLIN 事件
server.py
>import zmq
import random
import sys
import time
port = "5556"
context = zmq.Context()
socket = context.socket(zmq.DEALER)
socket.bind("tcp://*:5556")
while True:
socket.send(b"Server")
client.py
>import zmq
import random
import sys
import time
port = "5556"
context = zmq.Context()
socket = context.socket(zmq.DEALER)
socket.connect("tcp://localhost:5556")
poller = zmq.Poller()
poller.register(socket,zmq.POLLIN|zmq.POLLOUT)
while True:
socks = dict(poller.poll(50))
if socket in socks and socks[socket] == zmq.POLLIN:
msg = socket.recv()
print(msg)
解决方法
zmq.POLLIN
、zmq.POLLOUT
和 zmq.POLLIN | zmq.POLLOUT
的整数值分别为 1、2 和 3:
>>> zmq.POLLIN,zmq.POLLOUT,zmq.POLLIN | zmq.POLLOUT
(1,2,3)
因此,如果在您的客户端中,if 语句期望在套接字中接收,则它必须等待 zmq.POLLIN
(1) 状态,但也必须等待 zmq.POLLIN | zmq.POLLOUT
(3) 状态,因为它们是独占的.
重写你的 if 语句:
if socket in socks and socks[socket] in (zmq.POLLIN,zmq.POLLIN | zmq.POLLOUT):
# your code
...
同样的,如果你想在套接字中发送必须等待zmq.POLLOUT
(2)和zmq.POLLIN | zmq.POLLOUT
(3)状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。