为了实现服务器和客户端之间的双向通信,我设计了一个基于JSON的简单协议(外观like this)。
想法是有这样的层次:
RPC
或请求资源并获得响应在我发现JSON-RPC
存在之前,我有一种感觉,我正在重新发明轮子。
但似乎JSON-RPC
将第2层和第3层组合在一起,因此我无法实现语言L1和L2,并实现工具A,B或C的传输。例如,我想要将python和C#实现,与ZeroMQ
库结合作为传输(第2层),或者使用websocket传输。这两种工具都允许传递和接收消息,因此库使用它们。或UDP或基本HTTP。
问题是:JSON-RPC
是否将第2层和第3层组合在一起?如果是,是否有我想要的替代品,或者我必须坚持我自己的实现?
答案 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。