JSON-RPC轻量级远程调用协议介绍及使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON-RPC轻量级远程调用协议介绍及使用相关的知识,希望对你有一定的参考价值。
参考技术A
json-rpc是基于json的跨语言远程调用协议。比xml-rpc、webservice等基于文本的协议数据传输格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是很优秀的一种远程调用协议。眼下主流语言都已有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用。又可与spring无缝集合,比较适合于基于spring的项目开发。
json-rpc协议很easy,发起远程调用时向服务端数据传输格式例如以下:
"method": "sayHello", "params": ["Hello JSON-RPC"], "id": 1
参数说明:
method: 调用的方法名
params: 方法传入的参数。若无参数则传入 []
id : 调用标识符。用于标示一次远程调用过程
server其收到调用请求,处理方法调用,将方法效用结果效应给调用方;返回数据格式:
参数说明:
result: 方法返回值。若无返回值。则返回null。
若调用错误,返回null。
error :调用时错误,无错误返回null。
id : 调用标识符,与调用方传入的标识符一致。
以上就是json-rpc协议规范,很easy,小巧。便于各种语言实现。
2.1、server端Java调用演示样例
jsonrpc4jserver端java演示样例:
2.2、Javaclient调用演示样例
jsonrpc4j的Javaclient调用演示样例:
2.3、JavaScriptclient调用演示样例
基于jsonrpcjs的javascriptclient调用演示样例:
2.4、直接GET请求进行调用
无需不论什么client。仅仅需手工拼接参数进行远程调用,请求URL例如以下:
参数说明:
method : 方法名
params :调用参数。json的数组格式[], 将参数需先进行url编码,再进行base64编码
id : 调用标识符,随意值。
json-rpc是一种很轻量级的跨语言远程调用协议。实现及使用简单。
仅需几十行代码,就可以实现一个远程调用的client。方便语言扩展client的实现。
server端有php、java、python、ruby、.net等语言实现,是很不错的及轻量级的远程调用协议。
远程调用——hessian使用入门
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
常见的远程调用的技术:
1、webservice(CXF、axis)soap
2、httpclient
3、hessian---http协议、二进制数据
4、dubbo---阿里巴巴
hessian有两种发布服务的方式:
1、使用hessian框架自己提供的Servlet发布
2、和spring整合发布服务
一、什么是Hessian
Hessian 是一个基于 binary-RPC 实现的远程通讯 library。使用二进制传输数据。
Hessian通常通过Web应用来提供服务,通过接口暴露。
Servlet和Spring的DispatcherServlet都可以把请求转发给Hessian服务。
由以下两种方式提供,分别为:
com.caucho.hessian.server.HessianServlet、org.springframework.web.servlet.DispatcherServlet。
二、入门案例
2.1 服务端开发:
第一步:创建一个web项目,并导入hessian的jar包
第二步:创建一个接口
public interface HelloService { public String sayHello(String name); public List<User> findAllUser(); }
第三步:提供上面接口的实现类
public class HelloServiceImpl implements HelloService{ public String sayHello(String name) { System.out.println("sayHello方法被调用了"); return "hello " + name; } public List<User> findAllUser() { List<User> list = new ArrayList<User>(); list.add(new User(1, "小王")); list.add(new User(2,"小白")); return list; } }
第四步:在web.xml中配置服务
<servlet> <servlet-name>hessian</servlet-name> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <init-param> <param-name>home-class</param-name> <param-value>cn.zang.service.HelloServiceImpl</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>cn.zang.service.HelloService</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>hessian</servlet-name> <url-pattern>/hessian</url-pattern> </servlet-mapping>
wsimport
wsdl2java
2.2 客户端开发:
第一步:创建一个客户端项目,并导入hessian的jar包
第二步:创建一个接口(和服务端接口对应)
public interface HelloService { public String sayHello(String name); public Object findAllUser(); }
第三步:使用hessian提供的方式创建代理对象调用服务
HessianProxyFactory factory = new HessianProxyFactory(); HelloService proxy = (HelloService) factory.create(HelloService.class, "http://localhost:8089/hessian_server/hessian"); String ret = proxy.sayHello("test"); System.out.println(ret); Object users = proxy.findAllUser(); System.out.println(users);
以上是关于JSON-RPC轻量级远程调用协议介绍及使用的主要内容,如果未能解决你的问题,请参考以下文章