35 lines
978 B
Python
35 lines
978 B
Python
|
# Copyright (C) PyZMQ Developers
|
||
|
# Distributed under the terms of the Modified BSD License.
|
||
|
from __future__ import annotations
|
||
|
|
||
|
import zmq
|
||
|
from zmq.green import Poller
|
||
|
|
||
|
|
||
|
def device(device_type, isocket, osocket):
|
||
|
"""Start a zeromq device (gevent-compatible).
|
||
|
|
||
|
Unlike the true zmq.device, this does not release the GIL.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
device_type : (QUEUE, FORWARDER, STREAMER)
|
||
|
The type of device to start (ignored).
|
||
|
isocket : Socket
|
||
|
The Socket instance for the incoming traffic.
|
||
|
osocket : Socket
|
||
|
The Socket instance for the outbound traffic.
|
||
|
"""
|
||
|
p = Poller()
|
||
|
if osocket == -1:
|
||
|
osocket = isocket
|
||
|
p.register(isocket, zmq.POLLIN)
|
||
|
p.register(osocket, zmq.POLLIN)
|
||
|
|
||
|
while True:
|
||
|
events = dict(p.poll())
|
||
|
if isocket in events:
|
||
|
osocket.send_multipart(isocket.recv_multipart())
|
||
|
if osocket in events:
|
||
|
isocket.send_multipart(osocket.recv_multipart())
|