WebSocket 传输不可用,您必须安装与您的异步模式兼容的 WebSocket 服务器才能启用它

Mil*_*hen 13 python gunicorn python-socketio

当我使用python-socketio和gunicorn在python环境中开发一些socket.io服务时,我在这里遇到了一个问题。

我使用的是 Mac OS X,我使用的是 python 3.7。

环境设置
$ pip install python-socketio
$ pip install gunicorn

服务器端代码
app.py

import socketio

sio = socketio.Server()
app = socketio.WSGIApp(sio, static_files = {
    '/': './socketio-client.html'
})

@sio.event
def connect(sid, environ):
    print(sid, 'connected')

@sio.event
def disconnect(sid):
    print(sid, 'disconnected')

Run Code Online (Sandbox Code Playgroud)

客户端代码
socketio-client.html

<html>
  <head>
    <title>Socket.IO Demo</title>
    <script src="https://cdn.socket.io/3.1.3/socket.io.min.js" integrity="sha384-cPwlPLvBTa3sKAgddT6krw0cJat7egBga3DJepJyrLl4Q9/5WLra3rrnMcyTyOnh" crossorigin="anonymous"></script>
  </head>
  <body>
    <h1>Socket.IO Demo</h1>
    <script>
      const sio = io();
      sio.on('connect', () => {
        console.log('connected');
      });

      sio.on('disconnect', () => {
        console.log('disconnected');
      });
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

启动程序
我将文件放在同一文件夹中。并按照命令启动它。
$ Gunicorn --线程 50 应用程序:应用程序
在此输入图像描述

我使用浏览器打开 http://localhost:8000 并且可以正常工作。 问题 但是服务器有问题

WebSocket 传输不可用,您必须安装与异步模式兼容的 WebSocket 服务器才能启用它。有关详细信息,请参阅文档。(此错误的进一步发生将被记录为 INFO 级别)

我尝试这样做
$ gunicorn --log-level INFO --thread 50 app:app
,但我仍然无法从 INFO 日志级别获取有用的信息。

代码可以继续运行,但消息显示我要安装 WebSocket 服务器,但我不知道对于 python-socketio 或 Gunicorn 的情况需要安装哪种包。

我错过了安装什么样的软件包?这是我第一次使用 python-socketio 和 Gunicorn。
接下来我应该做什么?

感谢您的帮助。

Mil*_*hen 11

只需要在这里安装更多的软件包即可。
$ pip install gevent-websocket
$ pip install eventlet

进而
$ gunicorn --thread 50 app:app

在此输入图像描述

更新1:

如果服务器端需要主动emit到客户端,就需要这个环境。因为这个命令$ gunicorn --thread 50 app:app不能支持这种情况。

工作环境应按如下设置。

$ pip install eventlet==0.30.2
$ gunicorn -k eventlet -w 1 app:app