文件夾
技術簡單介紹
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"));
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、PHPclient調用演示樣例
基於json-rpc-php的PHPclient調用演示樣例:
<?php 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¶ms=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