Python 将websocket请求桥接到ZMQ并返回
我使用Python 将websocket请求桥接到ZMQ并返回,python,websocket,zeromq,gevent,ws4py,Python,Websocket,Zeromq,Gevent,Ws4py,我使用ws4py创建了一个web套接字服务器,它将消息发送到ZMQ消息总线,并将响应返回到web套接字。精简后的代码如下所示: from multiprocessing import Process from gevent import monkey; monkey.patch_all() from ws4py.websocket import WebSocket from ws4py.server.geventserver import WSGIServer from ws4py.serv
ws4py
创建了一个web套接字服务器,它将消息发送到ZMQ消息总线,并将响应返回到web套接字。精简后的代码如下所示:
from multiprocessing import Process
from gevent import monkey; monkey.patch_all()
from ws4py.websocket import WebSocket
from ws4py.server.geventserver import WSGIServer
from ws4py.server.wsgiutils import WebSocketWSGIApplication
import time
import gevent
from zmq.green.eventloop import ioloop, zmqstream
import zmq.green as zmq
class MyWebSocket(WebSocket):
def __init__(self, *args, **kwargs):
super(MyWebSocket, self).__init__(*args, **kwargs)
uri = 'tcp://127.0.0.1:5560'
context = zmq.Context()
self.publisher = context.socket(zmq.PUB)
self.publisher.bind(uri)
subscriber = context.socket(zmq.SUB)
subscriber.connect(uri)
subscriber.setsockopt(zmq.SUBSCRIBE, '')
loop = ioloop.IOLoop()
zstream = zmqstream.ZMQStream(subscriber, loop)
def _recv_result(msg):
print 'received from publisher', msg
zstream.on_recv(_recv_result)
gevent.spawn(loop.start)
def received_message(self, message):
# incoming from web client.
data = message.data
self.publisher.send_multipart(['id', data])
if __name__ == '__main__':
host, port = 'localhost', 9000
server = WSGIServer(
(host, port), WebSocketWSGIApplication(handler_cls=MyWebSocket)
)
server.serve_forever()
在这个最小的示例中,我删除了系统的处理部分,该部分将结果发送回消息总线并直接订阅消息(基本上使其成为一个复杂的echo服务器)。问题是永远不会调用
\u recv\u result()
。我删除了所有订阅筛选器前缀,并将其设置为gevent
线程,但这没有帮助。有人知道什么地方出了问题吗?你有没有找到解决办法?我不知道是否找到了解决办法,但我改用了tornado(还有其他多种原因)。