问题描述
SocketIO(app, async_mode=async_mode, cors_allowed_origins="*"),async_mode=‘eventlet’,定时任务用的apscheduler里的BackgroundScheduler,尽管后端日志显示发送消息成功,但是前端收不到。
解决方法
eventlet使用的是协程,BackgroundScheduler实际是线程,两者是矛盾的。因此需要把线程绿化或者改变async_mode为threading模式
方法一、async_mode=‘threading’
方法二、在使用BackgroundScheduler的文件中用猴子补丁
import eventlet
eventlet.monkey_patch()
在使用SocketIO(async_mode='eventlet')和BackgroundScheduler时,由于eventlet的协程特性与BackgroundScheduler的线程机制不兼容,导致前端无法接收到消息。解决方案包括将async_mode改为'threading'或者使用eventlet的monkey_patch()来绿化BackgroundScheduler所使用的线程。这两种方法都能解决协程和线程之间的矛盾,确保消息能够正确传递到前端。
298

被折叠的 条评论
为什么被折叠?



