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

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

目录

技术简介    1

一、JSON-RPC协议描述    1

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

2.1、服务器端Java调用示例    1

2.2、Java客户端调用示例    2

2.3、PHP客户端调用示例    2

2.3、JavaScript客户端调用示例    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协议非常简单,发起远程调用时向服务端传输数据格式如下:

{
"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客户端调用示例:

<?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、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如下:

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

参数说明:

method : 方法名

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

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

三、JSON-RPC总结

json-rpc是一种非常轻量级的跨语言远程调用协议,实现及使用简单。仅需几十行代码,即可实现一个远程调用的客户端,方便语言扩展客户端的实现。服务器端有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轻量级远程调用协议介绍及使用

时间: 2024-10-09 13:11:41

JSON-RPC轻量级远程调用协议介绍及使用的相关文章

Java 常用远程调用协议比较

一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础.但它只能用于JAVA程序之间的通讯.Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口.协议的规范公开,可以用于任意语言.Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间

[UE4]RPC,远程调用

RPC 一.Remote Procedure Call:远程程序调用 二.一个进程调用另外一个进程上的函数 由于“Server-shoot”方法被标记为“在服务器上运行”,所以尽管是在第二个窗口(客户端)开火,输出的信息是:Server:准备射击,表明这是在服务器上运行. 在服务器上“Server-shoot”方法又调用调用了“MutiCast-Shoot”方法,“MutiCast-Shoot”(被标记为“多路传送”),所以服务器会通知所有客户端都去执行这个方法. 结果就显示:Server:全体

Spring Boot 2 整合 Dubbo 框架 ,实现 RPC 服务远程调用

一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互. 2)图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点. 3)图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用. 4)图中只包含 RPC

dubbo_实现Hessian的远程调用协议

1.优点 连接个数:多连接 连接方式:短连接 传输协议:HTTP 传输方式:同步传输 序列化:Hessian二进制序列化 适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较大,可传文件. 适用场景:页面传输,文件传输,或与原生hessian服务互操作 约束: 参数及返回值需实现Serializable接口 参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属

storm翻译(3)Distributed RPC(分布式远程调用)

原文地址:http://storm.apache.org/documentation/Distributed-RPC.html 分布式RPC的目的是在storm进行大量的实时计算时,能够并行的调用storm上的函数.Storm topology可以将函数参数作为输入Stream,并且将被调用方法产生的结果作为返回发送出去. 与其说DRPC是storm的一个特点,不如说它只是storm基本概念如steams,spouts,bolts和topologies的一种表达方式.DRPC可以独立于storm

Hessian轻量级二进制远程调用框架

Hessian轻量级二进制远程调用框架 Hessian是一个轻量级的二进制远程调用框架,官方文档地址,它主要包括Hessian远程调用协议.Hessian序列化协议以及客户端服务端代理等几部分,关于Hessian协议可以看下另外一篇文章Hessian远程调用及序列化协议.Hessian远程调用框架构建在Http协议之上,下面是示意图. 下面这个图是一次远程调用的过程 其中步骤3.4.5.6是核心过程,还要细化下, 步骤3:将远程方法调用转换为hessian调用,具体为,客户端首先要先和服务器端建

Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛

【Rest】在Dubbo中开发REST风格的远程调用(RESTful Remoting)

目录 概述 REST的优点 应用场景 快速入门 标准Java REST API:JAX-RS简介 REST服务提供端详解 HTTP POST/GET的实现 Annotation放在接口类还是实现类 JSON.XML等多数据格式的支持 中文字符支持 XML数据格式的额外要求 定制序列化 配置REST Server的实现 获取上下文(Context)信息 配置端口号和Context Path 配置线程数和IO线程数 配置长连接 配置最大的HTTP连接数 配置每个消费端的超时时间和HTTP连接数 GZ

分布式服务架构之java远程调用技术浅析

分布式服务架构之java远程调用技术浅析     在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯