一个JSON-RPC连接上读取多个JSON对象(Reading multiple JSON obje

2019-10-20 08:29发布

我想提出一个流API,它可以同时处理RPC风格调用以及从服务器到客户端(而不是在JSON-RPC规范的通知,这是客户端到服务器)的通知。 最后这部分不幸的是排除了JSON-RPC +持续的HTTP。

该API是基于JSON和JSON-RPC规范。

JSON - http://www.ietf.org/rfc/rfc4627.txt

JSON-RPC - http://www.jsonrpc.org/specification

典型的会话可能是:

-> Sending to server
<- Receiving from server    

-> {'id': 0, 'method':'login','params':{'token':'secret'}}
<- {'id': 0, 'method':'login','result':0}
-> {'id': 1, 'method':'subscribe','params':{'symbol':'VOD.L'}}
<- {'id': 1, 'method':'subscribe','result':0}
...
<- {'method':'notifyPrice','params':{'symbol':'VOD.L', 'bid':10.1, 'ask':10.03}}
<- {'method':'notifyPrice','params':{'symbol':'VOD.L', 'bid':10.2, 'ask':10.03}}

上述消息,特别是通知,能来以任何顺序和在相同的分组。 无论是规格似乎包括消息分离器,这使得在不使用基于SAX解析器JSON,这是相当罕见的相比,他们的同行DOM已接收到一个完整的JSON消息很难知道的细节。

我失去了一些东西很明显,还是有真正的多个JSON消息进来过线之间分离没有标准的方式?

Answer 1:

你失去了一些东西:-)

每个JSON-RPC消息是有效的JSON值。 甲JSON值可以通过任何的:

  • 一个Array
  • 一个Object
  • 一个String
  • 一个Number

该JSON-RPC的信封是一个Object

如果这是一个原始套接字(如Telnet),然后...

对象与启动{和结束} 。 如果您正在使用正确的分析器(拉,或基于事件)在您的接收器,然后它并没有多么嵌套Object S和Array小号弄,你还是会知道,当你打的最后}

上述消息,特别是通知,能来以任何顺序和在相同的分组。

只要请求不interlaved(下一个开始前一个完成),那么就一点问题都没有。 这取决于你是否还需要信封终止换行符(又名面向行的协议)。

然而,当你处理HTTP ...

为什么不直接使用batch %的JSON-RPC规范的消息?



文章来源: Reading multiple JSON objects on a JSON-RPC connection