1

我有兴趣构建类似于 Twitter 构建的流式 API(只读)。数据只会是单向的,从服务器到客户端。客户端不必是 Web 浏览器,只要是可以在技术上保持持久 HTTP 连接打开的任何东西。我相当确定 Twitter 的流 API 所做的不是 WebSockets,也不是 COMET。我想知道他们部署的技术/策略是否具有可以研究的 w3c 规范。我不一定会看到他们在 W3C 上的策略的任何链接——所以它可能是“自定义”的东西,但是在理解构建这个服务器端 HTTP 流支持所涉及的流行语和协议的正确方向上的任何一点都会很棒。

4

3 回答 3

3

Twitter 的实现使用自定义协议,但在精神上类似于 w3c 标准的Server-Sent Events。服务器发送的事件比 websocket 简单得多,但只允许单向通信。在Tornado 的这个拉取请求中有一个协议服务器端的 python 实现。

于 2013-10-13T15:24:02.487 回答
1

基于这张幻灯片,twitter 流 API 使用Jetty服务器。那么普通阻塞 IO 有效吗?基本上,客户端发出一个请求,告诉它它感兴趣的推文,服务器响应但不关闭响应。每次有新的推文进入时,服务器都会收到通知并将数据写入(并刷新)回客户端,但不会再次关闭响应。

来自第 20 页的注释:

服务器内部如何工作?Hosebird 在 JVM 上运行。它是用 Scala 编写的。并使用嵌入式 Jetty 网络服务器来处理前端问题。我们为每个进程提供 8 个内核和大约 12 GB 的内存。他们每个人都可以向许多客户发送大量数据。

免责声明:我不熟悉这个话题,所以我可能完全错了。我说的都是我的感觉。这是一个有趣的话题。

于 2013-10-13T06:36:28.490 回答
0

您可能正在寻找发布/订阅服务。关于这方面的一些很好的信息是http://en.wikipedia.org/wiki/Publish/subscribe。您可以将服务设为只读并丢弃来自客户端的未连接到有效通道的消息。

可以使用 redis http://redis.io/topics/pubsub和一个小应用程序来连接到正确的通道来完成一个实现。

其他实现可以用 RabbitMQ http://www.rabbitmq.com/tutorials/tutorial-three-python.html 我确信还有其他实现,但我现在不知道它们。

这是 pub/sub 的 w3c 链接http://www.w3.org/community/pubsub/

于 2013-10-08T02:08:18.353 回答