Как я могу использовать этот пример websocket для работы с Flask?

Я пытаюсь использовать библиотеку Flask-Sockets Kenneth reitz для написания простого интерфейса/сервера websocket. Вот что я до сих пор.

from flask import Flask
from flask_sockets import Sockets

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

@sockets.route('/echo')
def echo_socket(ws):

    while True:
        message = ws.receive()
        ws.send(message)


@app.route('/')
def hello():
    return \
'''
<html>

    <head>
        <title>Admin</title>

        <script type="text/javascript">
            var ws = new WebSocket("ws://" + location.host + "/echo");
            ws.onmessage = function(evt){ 
                    var received_msg = evt.data;
                    alert(received_msg);
            };

            ws.onopen = function(){
                ws.send("hello john");
            };
        </script>

    </head>

    <body>
        <p>hello world</p>
    </body>

</html>
'''

if __name__ == "__main__":

    app.run(debug=True)

Я ожидаю, что когда я перейду на страницу флэшки по умолчанию, http://localhost:5000 в моем случае, я увижу окно с текстом hello john, но вместо этого получаю ошибку Firefox. Ошибка Firefox can't establish a connection to the server at ws://localhost:5000/echo. Как я могу сделать hello john в окне оповещения, отправив сообщение на веб-сервер, затем повторив ответ?

Ответ 1

Использование gevent-websocket (см. использование gevent-websocket):

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

Или запустите сервер, используя gunicorn (см. Развертывание флагов-сокетов):

gunicorn -k flask_sockets.worker module_name:app