Flask SocketIO + Gevent - 缓冲来自外部进程的事件

问题描述

我想从我的 Flask 项目中的异步类发送套接字。但是当我发送它时,它需要很长时间才能到达 JavaScript。我将其发送为:

socket_io.emit("event_name",{"foo": "bar"},broadcast=True,namespace="/com")

带有socketio的应用初始化为:

app = Flask(__name__,template_folder="templates",static_folder="static",static_url_path="/static")
socketio = SocketIO(app=app,cookie="cookie_name",async_mode=None)

它是由这个命令启动的:

socketio.run(app=app,host="0.0.0.0",port=5000,log_output=False)

我的 Python 库版本是:

# Python == 3.8.5
Flask==1.1.2
Flask-SocketIO==5.0.1
python-engineio==4.0.0
python-socketio==5.04
gevent==20.12.1
gevent-websocket==0.10.1

JavaScript SocketIO: v3.0.4

当我通过 socket_io 处理程序中的发射命令正常发送套接字时,它工作正常。但是当我想从外部进程发送相同的套接字时,需要很长时间。

有谁知道,我该如何解决这个问题? 谢谢

解决方法

问题在于猴子补丁和 32 位 Python3。我必须安装 64 位 Python3,然后在第一行添加:

import gevent.monkey; gevent.monkey.patch_all()