首页 > Web开发 > 详细

jsonrpc.js -- 原生js实现 JSON-RPC 协议

时间:2017-12-26 20:15:34      阅读:208      评论:0      收藏:0      [点我收藏+]

很早以前就涉及到多端远程调用 api的设计,那时候自己设计了个消息传递回调过程。最近了解了JSON-RPC协议,更正规,就可以自己实现下。逻辑也不复杂,没有限制底层消息传递的方式,可以应用到更多的场景。在实现中,没有区分服务器端和客户端的概念,获得不同的消息体,进行不同的处理,更方便的进行双向通信。

github地址: https://github.com/legu2009/jsonrpc

博客园地址:http://www.cnblogs.com/legu/p/8119678.html

jsonrpc

    JSON-RPC 是一个无状态的轻量的远程调用协议. http://www.jsonrpc.org/specification.

    jsonrpc.js 实现了 JSON-RPC 协议,没有实现消息传递的过程。实际使用的时候需要自己根据消息传递的方式扩展,也是该js应用的场景更广泛,不局限于底层消息传递方式。

环境

    jsonrpc.js 只要是能够运行js的环境都可以。

不支持批量消息

    处理批量消息的情况,有些是同步的,有些是异步的可能需要等待很长的时间,如果等所有批量的消息都有返回结构了,才发送结果消息,感觉存在的浪费

API

jsonRpc.addCommand(name,func,opt) Function

注册可以被远程端调用的方法

Arguments

  • name(String): 方法的名字
  • func(Function): 对应的方法
  • opt(Object): { sync: false,//默认情况,函数返回不是Promise且为undefind时不调用回调 always: false,//默认情况,函数回调一次就不在调用回调,设置true可以一直回调,但是需要使用 }

jsonRpc.removeCommand(name) Function

移除远程端调用的方法

Arguments

jsonRpc.exec([extend],name,[params],[func]) Function

发起远程调用,调用远端name的方法,参数为params(JSON-RPC,协议,支持Arrary和Object),获得返回的运行结果的时候,运行对应的func方法

Arguments

  • extend: { always: true,//函数回调不会清除引用,用于响应多child消息回调 ...otherProps: //Object.assign 扩展obj }
  • name(String): 远端方法的名字
  • params(Arrary or Object): 运行远端方法时候的参数(形式同JSON-RPC协议 的 params)
  • func(Function(reresult messages)): 返回的运行结果的时候,运行对应的方法,没有该参数,为通知方式发送消息

jsonRpc._send Function

需要扩展,实现底层消息传递

Arguments

  • obj(Object): 需要发送到远端的消息对象
  • mess(Object): mess是undefined时,本地可以理解为客户端,运行了jsonRpc.exec方法; mess存在的时候,本地可以理解为服务端,运行了对应的方法,mess为请求的数据

jsonRpc._onMessage Function

当有消息接收的时候主动调用,通过jsonRpc处理逻辑

jsonRpc.onCall(mess) Function

本地可以理解为服务端,注册的方法执行前调用,返回false不执行方法

jsonRpc.onResult(mess) Function

本地可以理解为客户端,接收到返回消息,执行回调之前

EXAMPLE

    没有实际项目应用,只是觉得需要支持

test.html

    基本消息传递的例子

sync.html

    同步函数情况下,对返回值undefind的特殊处理

send.html

    通过_call,从消息体本身的设计,限制服务端执行逻辑

result.html

    通过_guid,从消息体本身的设计,限制客户端对回调消息的执行

always1.html

    应对服务器端消息 分多次返回

always2.html

    应对客户端发送多个服务器端消息,都进行响应

jsonrpc.js -- 原生js实现 JSON-RPC 协议

原文:https://www.cnblogs.com/legu/p/8119678.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!