2013-07-18 15 views
2

我们目前正在研究一个性能优先的异步REST API。uWSGI&gevent持久网络套接字连接

最初,我们想要部署Node.js,因为它的事件驱动架构非常适合用例,但不幸的是,JavaScript不支持SCTP套接字。

这引导我们到Python,经过一些考虑后,我们决定与gent一起去。

但是,由于体系结构的性质,有两个领域的开销很大。

为了解决在内存中缓存数据的问题,我们使用uWSGI缓存框架,它应该表现良好。

第二个问题是应用程序通过SCTP连接到后端处理程序。使用当前设置,将建立此连接并关闭每个请求。每秒有数千次请求,这会造成很大的开销。

在理想的情况下,我们希望永久建立套接字连接,并为每个请求重新使用套接字连接。在PHP中,这可以使用持久套接字连接。 Python/uWSGI是否提供了类似的功能?或者,我们可以使用uWSGI排队框架并分批处理请求。

欢迎任何建议。

+0

你对'gevent'的含义不是事件驱动的? :)你能再次澄清你的设计中实体的顺序吗?像互联网 - >负载平衡器 - > uWSIG/gevent/Python应用程序 - > ??? –

+0

基于完全推迟的小细节,我对gevent有了一些严重错误的概念。我想我现在已经明白了。它确实是客户端 - >负载平衡器 - > uwsgi/gevent。 – awishformore

回答

0

一旦启用了gevent模式,uWSGI变为纯粹的(并且纯粹意味着不需要猴子路径)事件驱动(否则在使用gevent时没有优势)。 GEVENT指事件驱动+ greenlet(避免你写像node.js的回调地狱基于代码)

更多的神奇在这里:http://uwsgi-docs.readthedocs.org/en/latest/Async.html

WSGI应用程序,那么,应用程序,所以如果你想有持久的连接,只需在服务器启动或类似的地方打开它,你不需要特别的支持,如在PHP中。

+0

我想我只是被完全推迟了,但仅仅是为了澄清我是否立即得到它: 每次uwsgi收到请求,它都会通过入口函数(通常是应用程序(environment,response))将它发送到应用程序。 我们需要在启动服务器时设置的任何东西都只是在加载文件时执行的函数定义之外进入代码。正确? – awishformore

+0

后者已经是一个非常具体的问题,您需要为此显示代码。 –