【问题标题】:WebSocket cross-connection communication (Tornado?)WebSocket 交叉连接通信(Tornado?)
【发布时间】:2010-11-02 17:35:20
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: websocket tornado


    【解决方案1】:

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

    【讨论】:

    • 太棒了!这正是我正在寻找的类型。现在我看代码似乎有点明显,但事后看来总是 20/20,嗯?另外,感谢您无意中将我指向 Redis,这实际上是我接下来要寻找的东西! (基于非易失性内存的数据存储)
    • 旧链接已失效。这是新的gist.github.com/pelletier/532067
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多