如果启用了线程,为什么 flask-socketio 在 uWSGI+gevent 下保持 http 轮询

Why does flask-socketio stay http-polling under uWSGI+gevent if threading is enabled

在禁用线程的情况下使用 gevent 在 uWSGI 下成功使用 flask-socketio。可以看到socket连接变成了真正的websocket连接。

出于我们应用程序中的其他原因,我们希望启用线程(调用会阻塞的长时间本机库调用,而 gevent 无能为力)。一旦我们这样做,websocket 连接永远不会真正改变为真正的 websocket 连接 - 它保持在 http 轮询模式。

这就是兽性吗?关于线程的一些事情与 flask-socketIO 不兼容,或者我应该能够让它工作吗?

Threading和gevent本质上是不兼容的,你得二选一。但是 websocket 只在 gevent 下支持,所以很遗憾已经做出了选择。

附带说明一下,我可能是错的,但我怀疑当您在 gevent 之上引入线程时,websocket 连接不是唯一的问题。我认为您也会因此看到连接错误和长轮询重新连接。