如何通知客户端的浏览器服务器上的某些事件?



我在服务器端使用python (Tornado),在客户端使用一些javascript。我有一个常见的情况——一个用户向另一个用户发送消息。我希望服务器通知客户端的浏览器(消息的接收者)关于新消息。我该怎么做呢?我应该与客户端建立长期连接(可能使用websocket)或其他东西吗?

PS为了通过websocket建立连接,我找到了一个很好的库TornadIO

PS2因此,由于项目的高负载,在web服务器和每个客户端之间建立连接看起来很可疑。我怕有问题。

我在服务器端使用python (Tornado),在客户端使用一些javascript。我有一个常见的情况——一个用户向另一个用户发送消息。我希望服务器通知客户端的浏览器(消息的接收者)关于新消息。我该怎么做呢?我应该与客户端建立长期连接(可能使用websocket)或其他东西吗?

使用实时web服务器,如Tornado -是。TornadIO看起来是一个很好的解决方案,因为它将使用套接字。IO,为旧版本的浏览器提供回退选项。

维基百科关于C10k问题的条目提供了解决此问题的服务器列表:

已经开发了一些web服务器来解决C10K问题:

  • nginx,它依赖于一个事件驱动的(异步)架构,而不是线程,来处理请求(WordPress.com使用nginx来解决C10K问题)[2]
  • Lighttpd,它依赖于异步架构来处理请求[3]
  • Cherokee,一个轻量级的web服务器[4]
  • Tornado,一个用Python编写的非阻塞web服务器和web应用程序框架[5]
  • Apache Deft,异步,非阻塞web服务器运行在JVM上
  • JBoss Netty,一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,如协议服务器和客户端[6]
  • Node.js,异步,非阻塞web服务器,运行在Google的V8 JavaScript引擎上[7]
  • EventMachine,一个异步的,非阻塞的web服务器,运行在Ruby EventMachine上
  • Yaws,一个用Erlang编写的web服务器;从Erlang极其轻量级的进程中获益。
  • Medusa,一个用Python编写的非阻塞web服务器库

如你所见,Tornado在列表中。

除此之外,你的问题可能更多的是关于水平扩展,而不是关于如何实现服务器到客户端的通知。

根据您选择的实时服务器解决方案,这可能永远不会成为问题。例如,Caplin System的Liberator的单个实例可以实现超过10,000个持久连接。

最新更新