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

11
我正在构建一个JSON-RPC服务器,它接受通过HTTP的请求。我希望支持双向通信(客户端和服务器都可以发送请求),具体用例是发布/订阅架构,其中客户端发送subscribe(X)请求并在(几乎)实时接收到changed(X)请求。据我所知,有几种使用HTTP实现此功能的方法:
  • 长轮询
  • WebSockets
  • 使用基于cookie的会话模型进行轮询调用
  • 流(保持HTTP连接打开)
  • 上述一些方法的组合
我要找的是基于已接受的互联网标准(如果可能的话)的解决方案,可从Web浏览器使用且易于在客户端使用。到目前为止,我更喜欢使用流(Twitter,CouchDB就是这样做的),但我不确定这在浏览器中和JSON-RPC库中的支持情况如何。另外,可能还有其他我不知道的方法。
提前致谢。
4个回答

3
据我所知,流媒体由FF、Chrome(存在缓冲问题,需要数据类型为application/octet-stream或引言才能工作)和IE8(通过一个小的XDomainRequest)支持。我不知道Opera的情况。
我真的不知道有关彗星行业标准的任何信息,Bayeux可能是最接近的。很难看出Facebook/Gmail/Twitter是如何做到的,因为所有代码都被混淆了,而且很难找到有关所有浏览器如何处理所有内容的信息。
更加困难的是,您将需要使用专门的服务器,保持这么多连接打开将需要线程池等等。普通服务器会很快崩溃。
如果您可以使其可靠地工作,那么它是一种非常强大的设计。

Tornado声称可以支持数千个并行连接,并且被FriendFeed(现在的Facebook)使用。它也是开源的,网址为http://www.tornadoweb.org/。 - keatch

3

感谢提供socket.io的链接。我的HTTP服务器组件已经存在(使用Erlang编写),但是socket.io的方法非常启发人。 - Felix Lange

2
你可以看一下JSONRPC-bidirectional,它支持WebSocket、Worker、WebRTC和HTTP的双向远程过程调用,并且非常易于扩展。"最初的回答"

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接