9

我正在构建一个通过 HTTP 接受请求的 JSON-RPC 服务器。我想支持双向通信(客户端和服务器都可以发送请求),具体的用例是发布/订阅架构,其中客户端发送请求并(几乎)实时subscribe(X)接收请求。changed(X)据我所知,有几种方法可以用 HTTP 实现这一点:

  • 长轮询
  • 网络套接字
  • 使用基于 cookie 的会话模型轮询调用
  • 流式传输(保持 HTTP 连接打开)
  • 以上一些的组合

我正在寻找的是一种基于公认的互联网标准(如果可能)的解决方案,可从 Web 浏览器使用并且易于在客户端使用。到目前为止,我更喜欢流媒体(Twitter、CouchDB 就是这样做的),但我不确定浏览器和 JSON-RPC 库对它的支持程度如何。此外,可能还有其他我不知道的方法。

先感谢您。

4

4 回答 4

3

我认为你应该看看socket.io来完成你的任务。如果您想观看作者的这个视频,您可以观看:“ Socket.IO Workshop: Guillermo Rauch ”。作为客户端在两台服务器上都可以轻松使用。我在socket.io 之上使用 redis 创建了一个简单的示例 pubsub

于 2011-01-28T16:20:17.990 回答
3

据我所知,FF、Chrome(存在需要应用程序/八位字节流的数据类型或工作前奏的缓冲问题)和 IE8(通过一点 XDomainRequest)支持流式传输。我不知道歌剧。

我真的不知道任何彗星行业标准,巴约可能是最接近的。很难看出 facebook/gmail/twitter 是如何做到的,因为所有代码都被混淆了,而且很难找到有关所有浏览器如何处理所有事情的大量信息。

更困难的是您需要使用专门的服务器,保持这么多连接打开将需要线程池等。普通服务器会很快崩溃。

如果你能让它可靠地工作,这是一个非常强大的设计。

于 2011-01-28T15:53:59.477 回答
2

你应该看看JSONRPC-bidirectional 。它支持基于 WebSocket、Worker、WebRTC 和 HTTP 的双向 RPC,并且具有高度可扩展性。

于 2019-06-16T14:47:49.200 回答
1

如果有人对 Java 实现感兴趣,我只是写了一个示例应用程序和一篇关于它的博客文章。它使用 Java、Maven、Comet、Bayeux、Spring。 http://jaye.felipera.cloudbees.net/ http://geeks.aretotally.in/thinking-in-reverse-not-taking-orders-from-yo

于 2011-02-19T13:48:53.680 回答