我有兴趣构建一个类似于Twitter构建的流式API(只读)。数据只会单向地从服务器传输到客户端。客户端不必是 Web 浏览器,而只是任何在技术上可以保持持久 HTTP 连接打开的状态。我相当确定Twitter的流媒体API正在做的事情不是WebSockets,也不是COMET。我想知道他们部署的技术/策略是否具有可以研究的w3c规范。我不一定在 W3C 上看到任何指向他们的策略的链接 - 所以这可能是"自定义"的东西,但任何正确方向上理解构建此服务器端 HTTP 流支持所涉及的流行语和协议的任何一点都会很棒。
Twitter的实现使用自定义协议,但它在精神上类似于w3c标准的Server-Sent Events。 服务器发送的事件比 websocket 简单得多,但只允许一个方向的通信。 在这个龙卷风的拉取请求中,有一个协议的服务器端的python实现。
根据这张幻灯片,Twitter 流媒体 API 使用 Jetty 服务器。那么普通阻塞 IO 有效吗?基本上,客户端发出一个请求,告诉它感兴趣的推文,服务器响应但不关闭响应。每次有新的推文进入时,服务器都会收到通知并将数据写入(和刷新)回客户端,但同样不会关闭响应。
来自第 20 页的注释:
服务器如何在内部工作?Hosebird在JVM上运行。它 用斯卡拉写的。并使用嵌入式 Jetty 网络服务器来处理 前端问题。我们为每个流程提供 8 个内核和大约 12 个演出 记忆。他们每个人都可以向许多客户发送大量数据。
免责声明:我不熟悉这个话题,所以我可能完全错了。我说的是基于我的感觉。这是一个有趣的话题。
您可能正在寻找发布/订阅服务。这方面的一些好信息是 http://en.wikipedia.org/wiki/Publish/subscribe 的。可以将服务设置为只读,并丢弃来自客户端的未连接到有效通道的消息。
可以使用 redis http://redis.io/topics/pubsub 和一个小应用程序来完成实现,以连接到正确的通道。
其他实现可以通过以下方式完成兔子MQ http://www.rabbitmq.com/tutorials/tutorial-three-python.html我确信还有其他实现,但目前我并不了解它们。
这是发布/订阅 http://www.w3.org/community/pubsub/的w3c链接