问题描述
我想从一开始就使用Cyclone或Tornado在python中实现长轮询。客户端可能需要几个小时才能连接到该服务。我的概念:
客户端HTTP请求将由Nginx代理(用作负载平衡器)后面的多个龙卷风/气旋处理程序线程处理。将有多个请求数据队列:一个用于所有客户端的所有未处理请求的队列,其余队列包含先前由工作进程生成的,特定于每个已连接客户端的响应的队列。当请求被传送到龙卷风/旋风处理器线程时,请求数据将被发送到工人队列进行处理,然后由工人(连接到数据库等)进行处理。同时,龙卷风/旋风处理器线程将调查特定于客户端的队列,并将包含数据的响应发送回客户端(如果队列中有一些等待)。请看下图。
简单图:https://i.stack.imgur.com/9ZxcA.png
我正在考虑队列系统,因为某些请求可能在数据库上非常繁重,而某些请求可能会为其他客户端创建通知和消息。这是迈向可扩展服务器的一种方法吗?还是只是矫kill过正?
解决方法
经过一些研究,我决定使用连接到zeroMQ的龙卷风websocket。受此答案的启发:Scaling WebSockets with a Message Queue。