首页 > 解决方案 > 我正在尝试使用 flask_socketio 制作一个简单的聊天应用程序,但它无法正常工作

问题描述

我正在尝试使用flask和flask_socketio创建一个简单的聊天应用程序,它可以工作,但是WebSocket升级没有发生,它正确地给了我这个错误

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

我看到了很多教程并以安装(gunicorn,gevent,eventlet)和更新包和库结束,但是当我运行应用程序时,它可以工作并且消息从客户端发送到服务器并再次将其广播给所有客户端但是连接不是 websocket 它是池化的

服务器端

from flask import Flask, app, render_template, redirect
from flask_socketio import SocketIO



app = Flask(__name__) 
app.config['SECRET_KEY'] = 'test'
socketio = SocketIO(app)



@app.route('/')
def main():
    return render_template('chat.html')


@socketio.on('message')
def message_func(data):

    socketio.send(data)



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

客户端



var socket = io('http://' + document.domain + ':' + location.port);

socket.on('connect', function() {
    console.log('connected');
})

socket.on('message', function(data) {
    const p = document.createElement('p');
    const br = document.createElement('br');
    p.innerHTML = data;
    document.querySelector('#panel').append(p);

})


document.querySelector('#send').onclick = () => {
    socket.send(document.querySelector('#userin').value)
}


标签: pythonwebsocketsocket.ioflask-socketio

解决方案


“部署:Gunicorn Web Server”文档中它说

在When using gunicorn with the gevent worker和gevent-websocket提供的WebSocket支持的文档中,必须将启动服务器的命令改为选择支持WebSocket协议的自定义gevent web服务器。修改后的命令是:

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app

为此,您还需要安装gevent-websocket


推荐阅读