Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶套接字和ZeroMQ_Python_Zeromq_Flask Sockets - Fatal编程技术网

Python 烧瓶套接字和ZeroMQ

Python 烧瓶套接字和ZeroMQ,python,zeromq,flask-sockets,Python,Zeromq,Flask Sockets,我正在玩弄如何通过websocket将zeromqpub/sub消息发送到浏览器。下面的“工作原理”是通过websocket发送消息。然而,尝试重新加载页面只是挂起,因为我猜是而True循环被阻塞。我认为gevent.sleep()调用将允许上下文切换,但显然不允许。你知道如何让这些部件一起工作吗 import zmq import json import gevent from flask_sockets import Sockets from flask import Flask, rend

我正在玩弄如何通过websocket将
zeromq
pub/sub消息发送到浏览器。下面的“工作原理”是通过websocket发送消息。然而,尝试重新加载页面只是挂起,因为我猜是
而True
循环被阻塞。我认为
gevent.sleep()
调用将允许上下文切换,但显然不允许。你知道如何让这些部件一起工作吗

import zmq
import json
import gevent
from flask_sockets import Sockets
from flask import Flask, render_template
import logging
from gevent import monkey

monkey.patch_all()

app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

sockets = Sockets(app)
context = zmq.Context()

ZMQ_LISTENING_PORT = 6557

@app.route('/')
def index():
    return render_template('index.html')

@sockets.route('/zeromq')
def send_data(ws):
    logger.info('Got a websocket connection, sending up data from zmq')
    socket = context.socket(zmq.SUB)
    socket.connect('tcp://localhost:{PORT}'.format(PORT=ZMQ_LISTENING_PORT))
    socket.setsockopt(zmq.SUBSCRIBE, "")
    gevent.sleep()
    while True:
        data = socket.recv_json()
        logger.info(data)
        ws.send(json.dumps(data))
        gevent.sleep()

if __name__ == '__main__':
    from gevent import pywsgi
    from geventwebsocket.handler import WebSocketHandler
    server = pywsgi.WSGIServer(('', 25000), app, handler_class=WebSocketHandler)
    server.serve_forever()

没关系,只是意识到需要做什么

import zmq.green as zmq
为了与gevent兼容使用