我在服务器端使用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个持久连接。