2017-11-27 11 views
1

나는 웹 소켓을 사용하는 플라스크 응용 프로그램을 만들려고합니다. example from Flask-sockets이 작동하지만 일반보기에서 메시지를 보내려면 어떻게해야합니까?플라스크보기에서 WebSocket 메시지 보내기

Flask-SocketIO가 .emit().send() -methods를 사용하는 것과 비슷합니다.

다음 예제 (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

모든 클라이언트의 전역 소켓 목록을 사용할 수 있습니다. 모든 목록을 탐색하고 모든 인스턴스에 메시지를 보냅니다.

예제 코드;

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