2017-11-27 7 views
1

Ich versuche, eine Flask-App, die WebSockets verwendet. Die example from Flask-sockets funktioniert aber wie würde ich eine Nachricht aus einer normalen Ansicht senden?Senden WebSocket-Nachricht von Flask anzeigen

Ähnlich wie Flask-SocketIO .emit() und .send() -Methoden verwenden.

Im Beispiel unten (aus dem Beispiel Flask-Sockets) möchte ich zum Beispiel eine Nachricht aus der hello-Ansicht senden können.

from flask import Flask 
from flask_sockets import Sockets 


app = Flask(__name__) 
sockets = Sockets(app) 


@sockets.route('/echo') 
def echo_socket(ws): 
    while not ws.closed: 
     message = ws.receive() 
     ws.send(message) 


@app.route('/') 
def hello(): 
    # How can I send a WebSocket message from here? 
    return 'Hello World!' 


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

Antwort

2

Sie können eine globale Socket-Liste aller Clients verwenden. Durchsuche alle Listen und sende eine Nachricht an alle ws-Instanzen.

Beispielcode;

from flask import Flask, render_template 
from flask_sockets import Sockets 


app = Flask(__name__) 
sockets = Sockets(app) 

ws_list = [] 

@sockets.route('/echo') 
def echo_socket(ws): 
    ws_list.append(ws) 
    while not ws.closed: 
     message = ws.receive() 
     ws.send(message) 


@app.route('/') 
def hello(): 
    # How can I send a WebSocket message from here? 
    return render_template('index.html') 


@app.route('/send_message_to_all_client') 
def broadcast(): 

    for ws in ws_list: 
     if not ws.closed: 
      ws.send("broadcast message") 
     else: 
      # Remove ws if connection closed. 
      ws_list.remove(ws) 

    return "ok" 

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