python - 我正在尝试使用 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)
}
解决方案
在“部署: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。
推荐阅读
- c# - 比较两个 HTML 字符串
- node.js - 如何在 NodeJS 项目中自动“审核”或“合理化”我的导入?
- xpath - Java XPath 前缀必须解析为命名空间
- javascript - 为什么这个来自 MDN 的简单 AJAX 示例会失败?
- python - 如何关闭与 Azure 服务总线队列的连接?
- java - 解析节点内具有相同属性的 XML 文件
- javascript - 如何在下拉列表中获取默认值?
- directory - 无法让 THREE.FBXLoader 定位到纹理文件夹
- javascript - 有没有办法用 p5.js 在多点场景中跟踪点的路径
- reactjs - 在 React 中重定向到具有不同页面布局的页面