2017-11-27 19 views
1

WebSocketを使用するFlaskアプリケーションを作成しようとしています。 example from Flask-socketsは動作しますが、通常の表示からメッセージを送信するにはどうすればよいですか?FlaskビューからWebSocketメッセージを送信

Flask-SocketIOが.emit().send()の方法をどのように使用するかと同様に、

以下の例(Flask-Socketsの例)では、私はhello -viewからメッセージをブロードキャストできるようにしたいと思います。

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() 

答えて

2

すべてのクライアントのグローバルソケットリストを使用できます。すべてのリストをトラバースし、すべてのWSインスタンスにメッセージを送信します。

例コード;

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() 
関連する問題