2

我对 WebSockets 有点摸索,很高兴让 Tornado 服务器运行并执行基本的 websocket 连接是多么容易。今天之前我从未使用过 Tornado,虽然我喜欢我所看到的,但我对它的使用有一些疑问。

首先,我使用 WebSockets 以便我可以在两台或多台客户端机器之间进行低开销的通信。(为了对话,我们只说它是一个聊天客户端)显然我可以从多台机器连接到服务器,它们都可以将消息推送到服务器并且服务器可以响应,这很棒!但这并不比您的标准 AJAX 请求好多少。如果我有一个持久连接,我也希望能够将数据推送到客户端。最简单的情况是用户 1 向服务器发布消息,服务器收到消息后立即将其推送给用户 2。

那么什么是实现这一目标的好方法呢?据我在 Tornado 中看到的,除了将消息放在某个数据存储中并让所有其他连接轮询新信息之外,没有其他方法可以在连接之间进行通信。不过,这让我觉得非常笨拙,因为此时您真正要做的就是将轮询过程从客户端移动到服务器。

当然,我可能完全在这里吠错了树。Tornado 根本不是这项工作的正确工具当然是合理的,如果是这样的话,我很乐意听到有关替代方案的建议!

4

2 回答 2

3

这是一个使用 tornado、WebSockets 和 redis 的聊天服务器:https ://gist.github.com/pelletier/532067 (更新:链接已修复,感谢@SamidhT)

于 2010-11-02T17:53:18.860 回答
0

虽然答案已经被接受:使用不同的服务对我来说似乎仍然非常低效。你为什么不直接使用共享内存+条件变量/信号量?您听起来像是遇到了标准的消费者-生产者问题

于 2013-05-12T17:47:59.583 回答