我已经部署了一个flask-socketio Web服务器,但是在安装了安装gevent的zerorpc之后,我遇到了很多麻烦..起初我的代码看起来像这样:
socketio.start_background_task(poll_events)
socketio.run(app, host="0.0.0.0", keyfile='key.pem', certfile='cert.pem')
我正在启动一个后台任务,它将不断从队列中读取并通过 socketio 发送消息。现在 gevent 已安装,flask-socketio 将尝试使用它(实际上我可以将我的服务器设为生产服务器而不是开发服务器),但随后 socketio.start_background_task 块。所以我读到了
from gevent import monkey; monkey.patch_all()
是必须的。所以现在我的代码看起来像这样:
socketio.start_background_task(poll_events)
WSGIServer(('0.0.0.0', 5000), app, keyfile='key.pem', certfile='cert.pem').serve_forever()
出于某种原因,在使用 pycharm 进行调试时,我收到了很多奇怪的 greenlet 异常,而且我认为有时 socketio 消息会被丢弃,所以我决定使用 eventlet。再说一次,需要打补丁。所以我的代码如下所示:
socketio.start_background_task(poll_events)
eventlet.wsgi.server(eventlet.wrap_ssl(eventlet.listen(("0.0.0.0", 5000)), keyfile='key.pem', certfile='cert.pem'), app)
由于猴子修补 zerorpc 抛出异常“gevent.exceptions.LoopExit:此操作将永远阻塞”
使用flask + socketio + zerorpc部署生产服务器的正确方法是什么?