我如何让这个 websocket 示例与 Flask 一起使用

How do I get this websocket example to work with Flask?

本文关键字:Flask 一起 websocket      更新时间:2023-09-26

我正在尝试使用Kenneth reitz的Flask-Sockets库来编写一个简单的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 。如何通过向 Web 服务器发送消息然后回显回复来使hello john显示在警报框中?

使用 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 运行服务器(参见 Flask-Sockets 部署):

gunicorn -k flask_sockets.worker module_name:app