Ich spiele mit bekommen zeromq
pub/sub-Nachrichten an einen Browser mit einem Websocket gesendet. Das Folgende funktioniert, indem Nachrichten über einen Websocket gesendet werden. Wie auch immer, der Versuch, die Seite neu zu laden, hängt einfach, da ich vermute, dass die while True
Schleife blockiert. Ich dachte, dass der gevent.sleep()
Anruf einen Kontextwechsel erlauben würde, aber anscheinend nicht. Irgendeine Idee, wie man all diese Teile zusammenarbeitet?flaschen-sockets und ZeroMQ
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()