说JSON-RPC先说一下什么是RPC。
RPC:远程过程调用,RPC就是从一台机器通过参数传递的方式调用另一台机器上的函数或方法并得到响应结果,RPC在使用形式上像调用本地函数一样去调用远程函数。
RPC是如何实现的?
RPC的实现有3个重要的步骤
1.寻址:客户端调用的时候怎么去通知服务端我要调用哪个函数,在RPC里每个函数都有自己的callid,所以每次客户端的请 求里面就必须带上这个id,服务端返回的时候也必须带上这个id用来告诉客户端返回的是那个函数调用的调用结果。
2.序列化与反序列化:在进行参数传递的前客户端需要将参数序列化成字节流,传给服务端之后服务端需要将这个字节流进行反序列化(json)
3.数据传输:客户端和服务器端传输数据是通过网络传输的,我们一般使用TCP/UDP作为数据传输层,这里我们使用的是TCP作为传输层,使用socket进行通信
JSON-RPC:是一个无状态且轻量级的以json方式作为传输内容的远程调用(RPC)协议。
无状态:客户端发送一次请求给服务端,服务端不会记录这次请求的信息,下次再次发送信息给服务端它不会知道你上次发送过请求。就像购物车操作一样,你现在添加了商品进入购物车,下次刷新的时候购物车就是空的。
这里的JSON请求包括四个字段
request:请求
jsonrpc:jsonrpc的版本,现在我们使用的是2.0
id:调用标识符,请求和响应的id相同。
method:所要调用方法名称的字符串
params:方法注入的参数,如无参数传入空。
response:响应
jsonrpc:jsonrpc的版本,现在我们使用的是2.0
id:调用标识符,请求和请求的id相同。
result:响应的结果
error:调用失败显示的错误信息,如果没有错误不包括这个字段
如果错误·error:{code:“错误码 ”,message:“ 错误信息”,data:”错误的附加信息 “}