javascript - 如何让这个 websocket 示例与 Flask 一起工作?

标签 javascript python websocket flask flask-sockets

我正在尝试使用 Kenneth reitz's Flask-Sockets 库,用于编写一个简单的 websocket 接口(interface)/服务器。这是我目前所拥有的。

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)

我期望发生的是当我转到默认的 flask 页面时,在我的例子中是 http://localhost:5000,我会看到一个带有文本 hello 的警告框john,但是我收到了 Firefox 错误。错误是 Firefox 无法与位于 ws://localhost:5000/echo 的服务器建立连接。如何通过向 Web 服务器发送消息然后回显回复来使 hello john 显示在警告框中?

最佳答案

使用 gevent-websocket(参见 gevent-websocket usage):

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 Deployment ):

gunicorn -k flask_sockets.worker module_name:app

关于javascript - 如何让这个 websocket 示例与 Flask 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19899578/

相关文章:

javascript - 如何停止setInterval并恢复?

python - 在从 Python 运行的系统命令中使用此处文档时出现错误 "sh: 1: read: Illegal option -d"

c# - 使用 HTML 解析器时如何加载网页上的所有项目?

python - django 社交身份验证多帐户关联

Tomcat JSR356 Websocket - 禁用 permessage-deflate 压缩

c# - Dispatcher.Invoke 更新 WPF Canvas 会导致性能问题

Javascript 类型变量名称/语法/引用?

javascript - 如何通过正则表达式从url获取优酷视频id?

php - Websocket 客户端身份验证

javascript - 将阅读更多按钮链接到另一个页面的 ID