通过HTTP进行实时双向JSON-RPC通信

时间:2011-01-27 23:28:57

标签: javascript http streaming comet json-rpc

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

  • 长轮询
  • 的WebSockets
  • 使用基于cookie的会话模型轮询呼叫
  • 流媒体(保持HTTP连接打开)
  • 上述部分内容的组合

我正在寻找的解决方案基于公认的互联网标准(如果可能),可从网络浏览器使用,易于在客户端使用。到目前为止,我赞成流式传输(Twitter,CouchDB这样做),但我不确定它在浏览器和JSON-RPC库中的支持程度。此外,还有其他方法可以做到,我不知道。

提前谢谢你。

4 个答案:

答案 0 :(得分:3)

据我所知,流式传输由FF,Chrome(具有需要数据类型application / octet-stream或工作序列的缓存问题)和IE8(通过一点XDomainRequest)支持。我不知道歌剧。

我真的不知道任何彗星行业标准,Bayeux可能是最接近的。很难看出facebook / gmail / twitter是如何做到这一点的,因为所有的代码都被混淆了,而且找到很多关于所有浏览器如何处理所有内容的信息都非常困难。

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

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

答案 1 :(得分:3)

我认为你应该看看socket.io来完成你的任务。如果你想观看作者的这段视频,你可以:“Socket.IO Workshop: Guillermo Rauch”。它很容易在服务器上作为客户端使用。我创建了一个简单的样本pubsub using redis on top of socket.io

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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