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


    很早以前就涉及到多端远程调用 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 Function
    返回一个 jsonRpc 实例,实例之间共用自增长 id
     
      success Function
          fail Function
    }
    作为服务端,JsonRpc上的静态属性,只在作为服务器端函数运行的时候,指向了当前消息回调的方法,如果是异步处理,请一开始缓存running对象保证函数正确

    jsonRpc.addCommand(name,func,opt) Function

    作为服务端,注册可以被远程端调用的方法

    Arguments

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

    jsonRpc.removeCommand(name) Function

    作为服务端,移除远程端调用的方法

    Arguments

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

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

    Arguments

    • extend:
      {
         always: true,//函数回调不会清除引用,用于响应多server消息响应
         ...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

    作为客户端,接收到返回消息,执行回调之前,返回false不执行回调

    EXAMPLE

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

    test.html

        基本消息传递的例子

    sync.html

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

    send.html

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

    result.html

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

    always1.html

        作为服务器端,回调消息 分多次返回客户端执行回调方法

    always2.html

        作为客户端,对一次发送多个服务器端消息,所有响应都执行回调方法,默认回调只执行第一次

  • 相关阅读:
    一个别人的心得(转发的)
    常见的游戏设计技术
    查看更新
    xml,json和各种序列化工具的对比
    python游戏环境搭建
    快速制作游戏
    子网和掩码
    nat
    pycharm使用技巧
    IP的面向无连接状态
  • 原文地址:https://www.cnblogs.com/legu/p/8119678.html
Copyright © 2020-2023  润新知