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
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等語言實現,是非常不錯的及輕量級的遠端呼叫協議。