我在服务器端使用python(Tornado),在客户端使用一些javascript。我有一个共同的情况 - 一个用户向另一个用户发送消息。我希望服务器通知客户端的浏览器(收到消息)有关新消息。我该怎么做?我应该与客户建立长期连接(可能使用websocket)还是别的什么?
PS 为了通过websocket建立联系我找到了很好的库TornadIO
PS2 因此,由于项目建立连接的高负荷,服务器和每个客户端看起来都很可疑。我怕c10k的问题。可能只是缺乏我的知识。
答案 0 :(得分:1)
我在服务器端使用python(Tornado),在客户端使用一些javascript。我有一个共同的情况 - 一个用户向另一个用户发送消息。我希望服务器通知客户端的浏览器(接收消息)有关新消息。我该怎么做?我应该与客户建立长期连接(可能使用websocket)还是别的什么?
使用Tornado等实时网络服务器 - 是的。 TornadIO看起来是一个很好的解决方案,因为它会使用socket.io,它具有旧浏览器的后备选项。
Wikipedia entry on the C10k issues提供已解决此问题的服务器列表:
已经开发了一些Web服务器来解决C10K问题:
- nginx,它依赖于事件驱动(异步)架构而不是线程来处理请求(WordPress.com使用nginx来解决C10K问题)[2]
- Lighttpd,它依赖异步架构来处理请求[3]
- Cherokee,一个轻量级的网络服务器[4]
- Tornado,一个用Python编写的非阻塞Web服务器和Web应用程序框架[5]
- Apache Deft,在JVM上运行的异步,非阻塞Web服务器
- JBoss Netty,一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序[6]
- Node.js,在Google的V8 JavaScript引擎上运行的异步,无阻塞的Web服务器[7]
- EventMachine,一个在Ruby EventMachine上运行的异步,非阻塞Web服务器
- Yaws,一个用Erlang编写的Web服务器;从Erlang非常轻量级的流程中获益。
- Medusa,一个用Python编写的非阻塞Web服务器库
正如您所见,Tornado已被列入。
除此之外,您的问题可能更多地与horizontal scaling相关,而不是如何实现服务器到客户端通知。
根据您选择的realtime server solution,这可能永远不会成为问题。例如,Caplin System's Liberator的单个实例可以实现超过10,000个持久连接。