WebSocket 连接失败:WebSocket 握手期间出错:意外的响应代码:200

WebSocket connection failed: Error during WebSocket handshake: Unexpected response code: 200

我有 Flask 应用程序,我想使用 flask-socketio 来处理带有 gunicorn 和 eventlet 的 webosockets。

虽然,当我尝试连接我的测试客户端 (http://www.websocket.org/echo.html) 时,我收到:

WebSocket connection to 'ws://localhost/socket.io?encoding=text' failed: Error during WebSocket handshake: Unexpected response code: 200

socketio_app.py

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, port=9090, host='0.0.0.0', async_mode='eventlet', debug=True)

@app.route('/socket.io')
def index():
    return render_template('index.html')


if __name__ == '__main__':
    socketio.run(app)

我运行是这样的:

gunicorn -k eventlet -w 1 socketio_app:app -b 0.0.0.0:9090 --error-logfile - --access-logfile - --log-level debug

我应该以其他方式使用它吗?我应该像那样手动修改我的回复吗?


@app.route('/socket.io')
def index():
    return Response(status=101, headers={
        'Connection': 'Upgrade',
        'Upgrade': 'websocket'
    })

您正在使用 WebSocket 客户端连接到 Socket.IO 服务器。使用 Socket.IO 客户端,你会没事的。 WebSocket与Socket.IO不一样,后者是在WebSocket之上实现的,使用了不同的协议。