我在服务器端使用python(Tornado),在客户端使用一些javascript。我有一个常见的情况 - 一个用户向另一个用户发送消息。我希望服务器通知客户端的浏览器(消息的接收者)有新消息。我该怎么做?我应该与客户端(可能使用 websocket)还是其他东西建立长期连接?
PS为了通过websocket建立连接,我找到了很好的库TornadIO
PS2 因此,由于建立连接 betwebb 服务器的项目负载很高,每个客户端看起来都很可疑。我怕c10k问题。可能只是缺乏我的知识。
我在服务器端使用python(Tornado),在客户端使用一些javascript。我有一个常见的情况 - 一个用户向另一个用户发送消息。我希望服务器通知客户端的浏览器(消息的接收者)有新消息。我该怎么做?我应该与客户端(可能使用 websocket)还是其他东西建立长期连接?
使用实时 Web 服务器,例如 Tornado - 是的。TornadIO 看起来是一个很好的解决方案,因为它将使用 socket.io,它为旧浏览器提供了后备选项。
关于 C10k 问题的Wikipedia 条目提供了已解决此问题的服务器列表:
已经开发了一些 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 已列出。
除此之外,您的问题可能更多是关于水平扩展,而不是关于如何实现服务器到客户端的通知。
根据您选择的实时服务器解决方案,这可能永远不会成为问题。例如,Caplin System 的 Liberator的单个实例可以实现超过 10,000 个持久连接。