- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个非常复杂的 Django 应用程序,目前由
apache/mod_wsgi 并部署在多个 AWS EC2 实例后面
AWS ELB 负载均衡器。客户端应用程序与服务器交互
使用 AJAX。他们还定期轮询服务器以检索通知
并更新他们的状态。我们希望删除轮询并替换
它使用“推送”,使用网络套接字。
因为任意实例处理来自客户端的 Web 套接字请求
并保持这些网络套接字,因为我们希望将数据推送到
可能不在提供源的同一实例上的客户端
用于推送的数据,我们需要一种方法将数据路由到适当的
实例,然后从该实例到适当的客户端 Web
socket 。
我们意识到 apache/mod_wsgi 不能很好地与 web sockets 配合使用,并且
计划用 nginx/gunicorn 替换这些组件并使用
gevent-websocket worker 。但是,如果多个工作进程之一
接收来自客户端的请求以建立 Web 套接字,如果
工作进程的生命周期由主要 gunicorn 控制
进程,不清楚其他工作人员是如何处理的,或者实际上
非 gunicorn 进程可以向这些 Web 套接字发送数据。
一个特定的案例是这样的:发出 HTTP 请求的用户是
定向到一个 EC2 实例(主机)并且所需的行为是数据是
发送给另一个完全打开网络套接字的用户
不同的实例。人们可以很容易地设想一个系统,其中一条消息
可以向每个实例上运行的代理(例如 rabbitmq)发送消息
包含要通过网络套接字发送到连接的客户端的数据
到那个实例。但是这些消息的处理程序如何访问
在 gunicorn 的工作进程中收到的网络套接字?
高级 python web 套接字对象创建了 gevent-websocket 和
提供给 worker 的不能被腌制(它们是实例
不支持酸洗的方法),因此它们不能轻易共享
从一个工作进程到一些长期运行的外部进程。
其实这个问题的根源归结为web sockets如何
由来自客户端的 HTTP 请求发起并由 WSGI 处理
服务器中的处理程序(例如 gunicorn)可由外部访问
流程? gunicorn worker 处理似乎不对,
用于处理 HTTP 请求的将产生长时间运行
线程卡在网络套接字上并支持处理来自
其他进程将消息发送到已被调用的 Web 套接字
通过这些工作进程附加。
谁能解释一下网络套接字和基于 WSGI 的 HTTP 请求
处理程序可能会在我描述的环境中相互作用吗?
谢谢。
最佳答案
我认为您已经做出正确的评估,即 mod_wsgi + websockets 是一个令人讨厌的组合。
您会发现所有 wsgi 工作人员都被 Web 套接字占用,并且尝试(大量)增加工作人员池的大小可能会因为内存使用和上下文切换而阻塞服务器。
如果您想坚持使用同步 wsgi 工作架构(而不是由 gevent、twisted、tornado 等实现的响应式(Reactive)方法),我建议将 uWSGI 视为应用程序服务器。最近的版本可以以旧方式处理一些 URL(即您现有的 django View 仍然可以像以前一样工作),并将其他 url 路由到异步 websocket 处理程序。这对您来说可能是一条相对顺利的迁移路径。
关于django - 如何将 Web 套接字与 django wsgi 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140497/
我正在尝试了解 WSGI 的功能并需要一些帮助。 到目前为止,我知道它是一种服务器和应用程序之间的中间件,用于将不同的应用程序框架(位于服务器端)与应用程序连接,前提是相关框架具有 WSGI 适配器。
正如之前多个问题/答案中所强调的,即this和 this我已将 WSGISocketPrefix 配置为 /etc/httpd/run/wsgi /etc/httpd/run目录具有root:apac
正如之前多个问题/答案中所强调的,即this和 this我已将 WSGISocketPrefix 配置为 /etc/httpd/run/wsgi /etc/httpd/run目录具有root:apac
我刚刚开始使用协同程序,并阅读了有关 gevent 和 greenlets 的内容。为了进行测试,我通过 gevents pywsgi 模块提供了这段代码: from gevent.pywsgi im
我正在尝试了解 WSGI 的工作原理。我知道我可以阅读规范,但我仍然想知道如何创建 spawning应用?一个完整的“ Hello World ”。 有人可以给我举个例子吗?有了一切,文件命名,创建模
我正在构建一个简单的 Web 服务,要求对所有请求进行签名。签名哈希是使用包括请求正文的请求数据生成的。我的愿望是拥有一个验证请求签名的中间件组件,如果签名无效则以错误响应。问题是中间件需要使用 en
为什么会出现此错误? Daemon process called 'dom_server' cannot be accessed by this WSGI application: /home/sta
HTTP格式 HTTP GET请求的格式: ? 1
我读过很多类似 this one 的帖子详细说明如何使用 WSGI 动态返回图像。但是,我看到的所有示例都是以二进制格式打开图像,读取它然后返回该数据(这对我来说很好用)。 我一直在尝试使用内存中的
我正在尝试使用 Apache 为我的网页提供服务,并且想知道 wsgi.py 和 django.wsgi 之间的区别。 两者都有文档,但我不确定应该实现哪一个。我在 Django 1.4、Apache
我正在尝试使用 uwsgi 运行 Django 应用程序。我发现的大多数指令都引用了“--wsgi-file”和“--module”来指定应用程序,但是“uwsgi”没有提到这些选项,当我尝试使用它们
我对以下术语感到非常困惑, 1.wsgi 2.python_wsgi 3.wsgi服务器 4. mod_wsgi 5. python web服务器网关接口(interface)(PEP3333) 这些
我通过如下设置 apache 服务器在 apache2/Mac OS X 上使用 mod_wsgi。 Order allow,deny Allow from all WSGIScri
对于我们的网络服务,我编写了一些逻辑来防止 multipart/form-data POST 大于 4mb。 它归结为以下内容(我已经剥离了所有 WebOb 用法并将其简化为普通的 WSGI 代码):
我有一个 Flask Web 服务器,为使用 Flask-login 的用户进行基本帐户身份验证。如果我自己运行网络服务器,帐户身份验证将按预期工作。使用 Apache 和 mod-wsgi 运行 F
我在 centos 6.9 机器上使用 httpd 和 mod_wsgi 和 httpd 这里是相关文件,我正在尝试在 apache 2.15 版本上部署 django,尝试谷歌但无法解决问题,任何帮
我将在虚拟主机的 ubuntu 服务器上设置一个 django 应用程序。 我已经配置了我的虚拟主机,所以出现了一些问题! 但是由于您在此处看到的一些问题,它仍然给我 500 内部错误: mod_ws
我有一个相当简单、朴素的 Python/WSGI/Pyramid 网络服务器。 它在使用 pyramid.config.Configurator().make_wsgi_app() 构建的服务器上使用
我试图在 Amazon 的 EC2 实例上发布我的网站,但我一直收到 500 错误。我真的不知道为什么。 //日志文件 [Sun Feb 17 23:12:48.066802 2013] mo
我正在尝试在 ubuntu 上的 apache2 上安装 mod_wsgi。所以我安装了 libapache2-mod-wsgi 包,我用 a2enmod 激活了他。 我有一个网站 (language
我是一名优秀的程序员,十分优秀!