1. 程式人生 > >JSON-RPC輕量級遠端呼叫協議介紹及使用

JSON-RPC輕量級遠端呼叫協議介紹及使用

技術簡介

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協議非常簡單,發起遠端呼叫時向服務端傳輸資料格式如下:

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

引數說明:

method: 呼叫的方法名

params: 方法傳入的引數,若無引數則傳入 []

id : 呼叫識別符號,用於標示一次遠端呼叫過程

伺服器其收到呼叫請求,處理方法呼叫,將方法效用結果效應給呼叫方;返回資料格式:

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

引數說明:

result: 方法返回值,若無返回值,則返回null。若呼叫錯誤,返回null。

error :呼叫時錯誤,無錯誤返回null。

id : 呼叫識別符號,與呼叫方傳入的識別符號一致。

以上就是json-rpc協議規範,非常簡單,小巧,便於各種語言實現。

二、JSON-RPC簡單示例

2.1、伺服器端Java呼叫示例

jsonrpc4j伺服器端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、Java客戶端呼叫示例

jsonrpc4j的Java客戶端呼叫示例:

        JsonRpcHttpClient client = new JsonRpcHttpClient(

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

        Map<String,String> headers = new HashMap<String,String>();

        headers.put("name""劍白");

     client.setHeaders(headers);

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

        System.out.println(properties);

2.3、PHP客戶端呼叫示例

基於json-rpc-PHP的PHP客戶端呼叫示例:

<?phpinclude(dirname(__FILE__)."/lib/client/JsonRpcClient.php");

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

$response=$client->getSystemProperties();

echo$response->result;

?>

2.3、JavaScript客戶端呼叫示例

基於jsonrpcjs的JavaScript客戶端呼叫示例:

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

rpc.call('getSystemProperties'function(result){

alert(result);

});

2.4、直接GET請求進行呼叫

無需任何客戶端,只需手工拼接引數進行遠端呼叫,請求URL如下:

引數說明:

method : 方法名

params :呼叫引數,json的陣列格式[], 將引數需先進行url編碼,再進行base64編碼

id : 呼叫識別符號,任意值。

三、JSON-RPC總結

json-rpc是一種非常輕量級的跨語言遠端呼叫協議,實現及使用簡單。僅需幾十行程式碼,即可實現一個遠端呼叫的客戶端,方便語言擴充套件客戶端的實現。伺服器端有php、java、Python、ruby、.net等語言實現,是非常不錯的及輕量級的遠端呼叫協議。