【问题标题】:web2py - do I need another server for a real time application?web2py - 我需要另一台服务器来运行实时应用程序吗?
【发布时间】:2015-08-13 23:52:21
【问题描述】:

在 web2py 示例中有一个使用 tornado 的 websocket 示例:

gluon/contrib/websocket_messaging.py 这需要启动另一个服务器,即tornado。我的问题是,我需要另一台服务器吗?我应该只有一台服务器来处理 websocket 内容和正常的 http 请求吗?

另外,似乎 tornado 是第二台服务器的首选服务器,这会有所不同吗?

我是 websockets(和 webapp 开发)的新手,所以任何可以帮助我更好地理解这一点的 cmets/链接将不胜感激。

【问题讨论】:

  • 如果您想使用,作为 Web 服务器服务(
  • 抱歉没看懂你的回复,能详细点吗?

标签: websocket tornado web2py


【解决方案1】:

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

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

为了启用多个同时的 websocket 连接,因此最好通过具有非阻塞网络 I/O 的服务器(例如 Tornado)来提供 websocket。详情请见http://www.tornadoweb.org/en/stable/guide/async.html

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

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

【讨论】:

  • 好吧,所以要明确一点,如果我坚持使用 web2py,我会让 web2py 服务器监听所有(?)端口,而 tornado 只会监听我用于实时通信的特定端口目的正确吗?
  • 是的,尽管 web2py 服务器不会监听所有端口,而是监听特定端口(通常是端口 80)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多