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

摘要:
文件夹技术简介1。JSON-RPC协议描述12。JSON-RPC调用12.1的简单演示示例。服务器端Java调用12.2。Java客户端调用22.3的演示示例。PHP客户端调用22.3的演示示例。JavaScript客户端调用22.4的演示示例。呼叫2 3的直接GET请求。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"));

        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&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

免责声明:文章转载自《JSON-RPC轻量级远程调用协议介绍及使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇winform显示系统托盘,双击图片图表显示窗体,退出窗体是否提示svg 不同比例缩放后 拖拽事件的鼠标位置转换为svg图纸中的位置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Eclipse debug 多线程

      以前用到过许多线程开发,对多线程开发也算是小有点心得,但一开始多线程开发的时候,碰到很多壁。但总得来说,有个好的工具总是能事半功倍。我用的工具是eclipse,在开发多线程时,其debug模式是能直接模拟多线程环境的,网上也有许多资料,但大多都不是很全。希望我能够将自己的一些心得记录下来,希望能帮助到还为多线程开发而纠结的朋友。 先写个简单的...

Go语言学习--包

包 包是多个Go源码的集合,是一种高级的代码复用方案。 Go语言中提供了很多内置包,例如fmt,os,io等... 包的定义 我们可以创建自己需要的包。 一个包可以理解为是一个存放.go文件的文件夹 go文件都需要在代码的第一行添加“ package 包名 ”代码,声明该文件归属的包。注: 一个文件夹下面直接包含的文件只能归属一个package,同样一个...

iperf3

使用方法 一、首先是介绍:iperf3是一个网络带宽测试工具,iperf3可以擦拭TCP和UDP带宽质量。iperf3可以测量最大TCP带宽,具有多种参数和UDP特性,iperf3可以报告带宽、延迟抖动和数据包丢失。 二、使用iperf3,你可以调整与时序、缓冲区和协议(如TCP、UDP、SCTP)相关的几个参数。它对网络性能调优操作很方便,为了获得最大或...

OSPF 做负载均衡

使用OSPF做负载均衡探究 一、OSPF产生背景 随着互联网的快速发展,为了满足建造越来越大基于IP网络的需要,不得不把网络逻辑结构划分为一个个单一自治系统。 二、OSPF技术原理 OSPF(Open Shortest Path First开放式最短路径优先 )是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一...

day28 客户端服务端架构介绍

一.客户端与服务端架构介绍 客户端与服务端实现通信 客户端将处理好的数据发给服务端,服务端把反馈好的数据再发回给客户端(客户端与服务端实现交互)    CS架构 跟CS相对应的还有一个BS架构 (浏览器和服务端软件) 为什么程序员要了解互联网通信协议? 程序员要写一个客户端和服务端的软件,两者实现基于网络通信,物理链接介质程序员不用管,但是协议需要管,...

GaussDB 200单机实例安装使用教程【入门必看】

写在前面GaussDB的产品,最初GaussDB的产品定义有三大产品线系列GaussDB 100、GaussDB 200、GaussDB300,简单介绍下:1)GaussDB 100:主要以OLTP为主。目前该产品已经应用在招商银行。在 2020年6月,将会开源单机版本;2)GaussDB 200:以OLAP为主,兼顾OLTP。该产品以 PostgreSQL...