JSON-RPC协议是独立的吗?

时间:2016-04-15 10:17:26

标签: json protocols json-rpc

为了实现服务器和客户端之间的双向通信,我设计了一个基于JSON的简单协议(外观like this)。

想法是有这样的层次:

  1. 硬件级别 - 特定于系统
  2. 消息传递级别 - 某些任意库处理硬件级别以传递和接收字符串消息
  3. MyJSONLibrary级别 - 使用库来调用RPC或请求资源并获得响应
  4. 申请级别
  5. 在我发现JSON-RPC存在之前,我有一种感觉,我正在重新发明轮子。

    但似乎JSON-RPC将第2层和第3层组合在一起,因此我无法实现语言L1和L2,并实现工具A,B或C的传输。例如,我想要将python和C#实现,与ZeroMQ库结合作为传输(第2层),或者使用websocket传输。这两种工具都允许传递和接收消息,因此库使用它们。或UDP或基本HTTP。

    问题是JSON-RPC是否将第2层和第3层组合在一起?如果是,是否有我想要的替代品,或者我必须坚持我自己的实现?

1 个答案:

答案 0 :(得分:2)

我假设您通过“第2层”引用传输层,并通过“第3层”引用 JAX-RPC运行时

this changelog引自 JSON-RPC 2.0(在official specifications中链接)。

  

传输独立性 [JSON-RPC 2.0]
  JSON-RPC 2.0没有定义任何特定于传输的问题,因为传输和RPC是独立的   V1.0定义了如果连接关闭则必须引发异常,并且无效的请求/响应必须关闭连接(并引发异常)。

事实上,如果您阅读规格 1 ,您将找不到有关运输的信息。

JSON-RPC可以在任何传输层上。

如果要使用现有库来实现运行时,根据Wikipedia,大多数实现使用 HTTP 或普通 TCP / IP 2
找到最适合的运行时的过程是繁琐的,不幸的是我没有使用它们中的任何一个,但由于大多数是开源和微小的 3 ,所以不应该很难插入新的传输层。

此外,由于C#和Python 4 都支持解析JSON,WebSocket和Socket,因此重新实现最小的 JSON-RPC 运行时应该是几天最多。

1 我强烈建议,因为它们非常简洁明了。

2 Phobos是一个抽象传输层的C ++实现。

3 对于C#JayRock可能有希望进行定制。

4 不确定Python。