JSON-RPC轻量级远程调用协议介绍及使用

2021-07-19 15:06

阅读:473

JSON-RPC轻量级远程调用协议介绍及使用

文件夹

技术简单介绍    1

一、JSON-RPC协议描写叙述    1

二、JSON-RPC调用简单演示样例    1

2.1、server端Java调用演示样例    1

2.2、Javaclient调用演示样例    2

2.3、PHPclient调用演示样例    2

2.3、JavaScriptclient调用演示样例    2

2.4、直接GET请求进行调用    2

三、JSON-RPC总结    3

參考文档    3

 

技术简单介绍

json-rpc是基于json的跨语言远程调用协议。比xml-rpc、webservice等基于文本的协议数据传输格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是很优秀的一种远程调用协议。眼下主流语言都已有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用。又可与spring无缝集合,比較适合于基于spring的项目开发。

一、JSON-RPC协议描写叙述

json-rpc协议很easy,发起远程调用时向服务端数据传输格式例如以下:

   { "method": "sayHello", "params": ["Hello JSON-RPC"], "id": 1}

參数说明:

method: 调用的方法名

params: 方法传入的參数。若无參数则传入 []

id : 调用标识符。用于标示一次远程调用过程

server其收到调用请求,处理方法调用,将方法效用结果效应给调用方;返回数据格式:

 {   
    "result":          "Hello JSON-RPC",         
    "error":                null,       
      "id":                      1
 }                        

參数说明:

result: 方法返回值。若无返回值。则返回null。

若调用错误,返回null。

error :调用时错误,无错误返回null。

id : 调用标识符,与调用方传入的标识符一致。

以上就是json-rpc协议规范,很easy,小巧。便于各种语言实现。

二、JSON-RPC简单演示样例

2.1、server端Java调用演示样例

jsonrpc4jserver端java演示样例:

public class HelloWorldServlet extends HttpServlet {

    private static final long serialVersionUID = 3638336826344504848L;

    private JsonRpcServer rpcService = null;

    @Override

    public void init(ServletConfig config) throws ServletException {

        super.init(config);

        rpcService = new JsonRpcServer(new HelloWorldService(), HelloWorldService.class);

    }

    @Override

    protected void service(HttpServletRequest req, HttpServletResponse resp)

            throws ServletException, IOException {

        rpcService.handle(req, resp);    

    }

}

2.2、Javaclient调用演示样例

jsonrpc4j的Javaclient调用演示样例:

        JsonRpcHttpClient client = new JsonRpcHttpClient(

             new URL("http://127.0.0.1:8080/index.json"));

        Mapheaders = new HashMap();

        headers.put("name", "剑白");

     client.setHeaders(headers);

        String properties = client.invoke("getSystemProperties", null, String.class);

        System.out.println(properties);

2.3、PHPclient调用演示样例

基于json-rpc-php的PHPclient调用演示样例:

include(dirname(__FILE__)."/lib/client/JsonRpcClient.php");

$client = new JsonRpcClient("http://10.13.49.234:8080/index.json");

$response = $client->getSystemProperties();

echo $response->result;

?>

2.3、JavaScriptclient调用演示样例

基于jsonrpcjs的JavaScriptclient调用演示样例:

var rpc = new jsonrpc.JsonRpc(‘http://127.0.0.1:8080/index.json‘);

rpc.call(‘getSystemProperties‘, function(result){

alert(result);

});

 

2.4、直接GET请求进行调用

无需不论什么client。仅仅需手工拼接參数进行远程调用,请求URL例如以下:

http://127.0.0.1:8080/index.json?method=getSystemProperties&id=3325235235235&params=JTViJTVk

參数说明:

method : 方法名

params :调用參数。json的数组格式[], 将參数需先进行url编码,再进行base64编码

id : 调用标识符,随意值。

三、JSON-RPC总结

json-rpc是一种很轻量级的跨语言远程调用协议。实现及使用简单。

仅需几十行代码,就可以实现一个远程调用的client。方便语言扩展client的实现。

server端有php、java、python、ruby、.net等语言实现,是很不错的及轻量级的远程调用协议。

參考文档

http://code.google.com/p/jsonrpc4j/

http://json-rpc.org/wiki/implementations

http://en.wikipedia.org/wiki/JSON-RPC

https://github.com/gimmi/jsonrpcjs

http://bitbucket.org/jbg/php-json-rpc

https://github.com/Pozo/json-rpc-php

https://github.com/subutux/json-rpc2php


评论


亲,登录后才可以留言!