moo*_*odh 5 python gevent socket.io gunicorn
我正在尝试使用worker socketio.sgunicorn.GeventSocketIOWorker使用gunicorn服务器在多个worker之间扩展gevent- socketio.我正在使用websockets,否则我正在强制进行XHR轮询(对于IE等).
XHR轮询需要一个会话来跟踪以下民意调查,但是当我从一个到两个或更多个工作人员时,请求开始在他们之间展开,这意味着状态丢失并且一切都崩溃了.
我认为以下几行代码是相关的:https: //github.com/abourget/gevent-socketio/blob/master/socketio/handler.py#L104-106 我想我需要一些其他的存储引擎,例如redis我正在使用常规的pubsub-actions,但这是在实际的库中.
所以我的问题是如何在我的应用程序中全局从内存会话存储转到另一个后端引擎(它是否优雅地覆盖上面链接中的会话代码?)而不必修改库本身?像php.ini中的PHP会话指令.我想可以说这是一个非常通用的python问题,但是我很难找到相关的信息,而且我也不确定它是否适用于这个库.
或者,如何在不同的工作人员和服务器上使用gevent-socketio的xhr-polling传输(没有粘性)?
谢谢!
这显然是socketio的一个限制。从我在网络上看到的情况来看,会话处理通常是在网络框架层而不是网络服务器层完成的。socketio 尝试在其自己的较低层上执行此操作,并且以有限的方式执行此操作。我猜作者认为成熟的解决方案有点矫枉过正。就你的情况而言,事实证明他们是错误的。
只有两种方法可以克服需要逻辑更改的限制:修补源代码和在运行时修补。选择最让你高兴的(或者,嗯,最不恶心的:^))。对于第二个选项,我建议用request_tokens具有相同接口的另一个实体替换和/或创建它的代码。由于第一段中所述的原因,我真的认为 socketio 作者很可能会接受一个源补丁,如果您提出的话,该补丁将允许它利用外部会话处理机制。
会话信息的标准位置是:共享内存、文件、数据库。我建议您更改逻辑,使 socketio 使用与您的 Web 框架(或组成页面的任何内容)相同的机制。
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |