- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试在我的应用程序中使用使用 websockets 的功能时,我在控制台中收到此错误:
File "/Users/user/venv/lib/python3.7/site-packages/simple_websocket/ws.py", line 138, in __init__
raise RuntimeError('Cannot obtain socket from WSGI environment.')
RuntimeError: Cannot obtain socket from WSGI environment.
我也在浏览器控制台中收到此错误:与“ws://localhost:5000/socket.io/?EIO=4&transport=websocket&sid=40NYzDgGYStMR0CEAAAJ”的 WebSocket 连接失败:
我尝试使用 gevent、gevent-websocket 和 eventlet,但这创建了 other issues ,我不确定我是否需要为此用例使用 gevent 或 eventlet。
下面是相关代码的其余部分:
__ 初始化 __.py
from flask_socketio import SocketIO
...
socketio = SocketIO()
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(Config)
socketio.init_app(app, cors_allowed_origins='*')
...
return app
应用.py
from app import create_app, socketio
app = create_app()
if __name__ == '__main__':
socketio.run(app)
路线.py这只接受 POST 请求,因为我从 Celery 任务向这条路线发送数据
from app import socketio
...
@main_bp.route('/send_message', methods=['POST'])
def send_message():
...
socketio.emit('test_message', {'msg':'Test'}, namespace='/test')
return 'Results Sent'
index.html
var socket = io.connect('http://localhost:5000/test');
socket.on('connect', function(){
console.log('Connected to socket')
});
socket.on('test_message', function(message){
console.log('Received test message');
}
)
请注意,在浏览器控制台中我会看到“已连接到套接字”,但看不到“已收到测试消息”
最佳答案
您正在使用 simple-websocket
包。这个包有一个支持的网络服务器列表。该错误表明您正在使用不在受支持列表中的 Web 服务器。
支持的网络服务器有:
从这个列表来看,生产 Web 服务器的唯一选择似乎是 Gunicorn,因为您说 eventlet/gevent 不能满足您的需求。
Gunicorn 的使用包含在 documentation 中.在该部分中,simple-websocket
是提到的第三个选项。这是示例启动命令:
gunicorn -w 1 --threads 100 module:app
关于python - flask ,FlaskSocketIO - 运行时错误 : Cannot obtain socket from WSGI environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68019530/
我是一名优秀的程序员,十分优秀!