python – 由于会话,使用gehr-socketio的多个worker因xhr-polling传输而失败

前端之家收集整理的这篇文章主要介绍了python – 由于会话,使用gehr-socketio的多个worker因xhr-polling传输而失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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
我想我需要一些其他的存储引擎,例如我用于常规pubsub-actions的redis,但这在实际库中很深.

所以我的问题是如何在我的应用程序中全局从内存会话存储转到另一个后端引擎(它是否优雅地覆盖上面链接中的会话代码?)而不必修改库本身? Something like PHP’s session directives in php.ini.我想可以说这是一个非常通用的python问题,但是我很难找到相关信息,而且我也不确定它是否适用于这个库.

或者,如何在不同的工作人员和服务器上使用gevent-socketio的xhr-polling传输(没有粘性)?

谢谢!

解决方法

这显然是对socketio的限制.从我在Web上可以看到,会话处理通常在Web框架层而不是Web服务器层完成. socketio试图在它自己的较低层上进行,并以有限的方式进行.我想作者认为一个成熟的解决方案将是一个过度杀伤力.在你的情况下,他们证明是错的.

只有两种方法可以克服需要逻辑更改的限制:修补源代码并在运行时修补.选择最适合你的人(或者,最好是令人厌恶的:^)).对于第二个选项,我建议将request_tokens和/或创建它的代码替换为具有相同接口的另一个实体.由于第1段中陈述的原因,我真的认为socketio作者可能接受一个源补丁,如果你提出一个,它将允许它使用外部会话处理机制.

会话信息的标准位置是:共享内存,文件,数据库.我建议你改变逻辑,使socketio使用与你的web框架(或任何组成你的页面)相同的机制.

猜你在找的Python相关文章