如何将web套接字与django wsgi集成

前端之家收集整理的这篇文章主要介绍了如何将web套接字与django wsgi集成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们目前有一个非常复杂的Django应用程序
apache / mod_wsgi并部署在a后面的多个AWS EC2实例上
AWS ELB负载均衡器.客户端应用程序与服务器交互
使用 AJAX.他们还定期轮询服务器以检索通知
并更新他们的州.我们希望删除民意调查并更换
它使用“推”,使用网络套接字.

因为任意实例处理来自客户端的Web套接字请求
并抓住这些网络套接字,因为我们希望将数据推送到
可能不在提供源的同一实例上的客户端
对于推送数据,我们需要一种方法将数据路由到相应的
实例,然后从该实例到适当的客户端Web
插座.

我们意识到apache / mod_wsgi不适合使用web套接字和
计划用Nginx / gunicorn替换这些组件并使用
gevent-websocket工人.但是,如果有几个工作进程之一
接收来自客户端的请求以建立Web套接字,如果是
工人进程的生命周期由主炮兵控制
过程,目前尚不清楚其他工人是如何处理的,或者事实上
非gunicorn进程可以将数据发送到这些Web套接字.

具体情况是这样的:发出HTTP请求的用户
定向到一个EC2实例(主机),所需的行为是数据
要发送给完全打开Web套接字的其他用户
不同的实例.人们可以很容易地想象出一个消息系统
可以向每个实例上运行的代理(例如rabbitmq)发送消息
包含要通过Web套接字发送到连接的客户端的数据
那个例子.但是这些消息的处理程序如何访问
网络套接字,是在gunicorn的工作过程中收到的?
高级python Web套接对象创建了gevent-websocket和
提供给工人的不能被腌制(他们是实例
不支持酸洗的方法),因此无法轻易共享
通过工作流程进行一些长期运行的外部流程.

事实上,这个问题的根源归结为web套接字如何
它们由来自客户端的HTTP请求启动并由WSGI处理
服务器(如gunicorn)中的处理程序可由外部访问
流程?枪炮工人处理似乎不对,
旨在处理HTTP请求的将产生长时间运行
线程挂起到Web套接字并支持处理来自的消息
将消息发送到已经存在的Web套接字的其他进程
通过这些工作流程附加.

任何人都可以解释Web套接字和基于WSGI的HTTP请求
处理程序可能会在我描述的环境中相互影响?

谢谢.

解决方法

我认为你已经做出了正确的评估,即mod_wsgi websockets是一个令人讨厌的组合.

您会发现所有wsgi工作者都被Web套接字占用,并且由于内存使用和上下文切换,尝试(大规模)增加工作池的大小可能会阻塞服务器.

如果你喜欢坚持同步wsgi工作者架构(而不是gevent,twisted,tornado等实现的被动方法),我建议将uWSGI作为应用服务器.最新版本可以旧方式处理某些URL(即您现有的django视图仍然可以像以前一样工作),并将其他URL路由到异步websocket处理程序.这对您来说可能是一个相对平稳的迁移路径.

猜你在找的HTML相关文章