在web2py示例中,有一个websocket示例在这里使用了tornado:
gluon/contrib/websocket_messaging.py
,这需要启动另一个服务器,即tornado
。我的问题是,我还需要另一台服务器吗?我应该只有一个服务器来处理websocket的东西和正常的http请求吗?
另外,龙卷风似乎是第二个服务器的选择,这可能是不同的东西吗?
我是websockets(和webapp开发)的新手,所以任何能帮助我更好地理解这一点的评论/链接都会很感激。
基于Python WSGI的框架(如web2py)通常通过线程web服务器提供服务。典型的HTTP请求只会非常短暂地占用一个服务器线程,以便接收传入的请求并交付响应,然后释放线程以服务另一个传入的请求。
另一方面,Websockets(和长轮询)需要客户端(即浏览器)和web服务器之间的长时间连接。因此,websocket连接将无限期地占用一个线程,所以你只能有多少线程就有多少连接,从而将应用程序限制为相对少量的并发用户。为了使许多同时的websocket连接,因此最好通过具有非阻塞网络I/O功能的服务器来服务websocket,例如Tornado。详细信息请参见http://www.tornadoweb.org/en/stable/guide/async.html。
另一个选择是使用带有monkey补丁的Gevent,它可以在这里描述的WSGI应用程序的上下文中使用。但是请记住,您使用的任何涉及网络I/O的库(例如数据库驱动程序)都必须与此方法兼容(通过monkey补丁或为协程显式设计的代码)。
如果实时/服务器推送功能是应用程序的主要方面,特别是如果你是web开发的新手,你可能会考虑为这个特定的用例构建一个框架,比如Meteor。