微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于接收和发送消息的 pyzmq 轮询器

如何解决用于接收和发送消息的 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.POLLINzmq.POLLOUTzmq.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 举报,一经查实,本站将立刻删除。