web2py - 我需要另一台服务器来实时应用吗?

时间:2015-08-13 04:15:51

标签: websocket tornado web2py

在web2py示例中,有一个websocket示例,它使用龙卷风:

gluon/contrib/websocket_messaging.py这需要启动另一台服务器tornado。我的问题是,我需要另一台服务器吗?我应该只有一台服务器来处理websocket的东西和普通的http请求吗?

此外,龙卷风似乎是第二台服务器的首选服务器,可能会有所不同吗?

我对websockets(和webapp开发)有点新手,所以任何评论/链接都可以帮助我更好地理解这一点。

1 个答案:

答案 0 :(得分:4)

基于Python WSGI的框架(如web2py)通常通过线程Web服务器提供。典型的HTTP请求只是非常短暂地占用一个服务器线程,以便接收传入请求并传递响应,然后释放线程以服务另一个传入请求。

另一方面,Websockets(和长轮询)需要客户端(即浏览器)和Web服务器之间的长期连接。因此,websocket连接将无限期地占用一个线程,因此您只能拥有与线程一样多的连接,从而将应用程序限制为相对较少的并发用户。

为了实现许多同时的websocket连接,因此最好通过具有非阻塞网络I / O的服务器(如Tornado)提供websockets。有关详细信息,请参阅http://www.tornadoweb.org/en/stable/guide/async.html

另一种选择是将Geventmonkey patching一起使用,可以在WSGI应用程序的上下文中使用here。但请记住,您使用的涉及网络I / O的任何库(例如数据库驱动程序)必须与此方法兼容(通过猴子修补或为协同程序明确设计的代码)。

如果实时/服务器推送功能是应用程序的一个主要方面,特别是如果您不熟悉Web开发,则可以考虑为此特定用例构建的框架,例如Meteor。< / p>