Hessian入门介绍

一、远程通讯协议的基本原理 

网络通信需要做的就是将从一台计算机传输到另外一台计算机,基于传输协议网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络 IO ,主要有 bio 、 nio 、 aio 三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。

二、应用级协议Binary-RPC 

Binary-RPC(Remote Procedure Call Protocol,远程过程调用协议)是一种和RMI(Remote Method Invocation,远程方法调用)类似的远程调用的协议,它和RMI 的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ) ,这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。

Binary -RPC 协议的一次远程通信过程:

  1 、客户端发起请求,按照 Binary -RPC 协议将请求信息进行填充;
  2 、填充完毕后将二进制格式文件转化为流,通过传输协议进行传输;
  3 、接收到在接收到流后转换为二进制格式文件,按照 Binary -RPC 协议获取请求的信息并进行处理;
  4 、处理完毕后将结果按照 Binary -RPC 协议写入二进制格式文件中并返回。

问题总结:
  1 、传输的标准格式是:标准格式的二进制文件。
  2 、怎么样将请求转化为传输的流?将二进制格式文件转化为流。
  3 、怎么接收和处理流?通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入 XML 中返回。

  4 、传输协议是?http

三、Hessian介绍

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary protocol, it is well-suited to sending binary data without any need to extend the protocol with attachments.

Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。只是它不使用SOAP协议,但相比webservice而言更简单、快捷。

Hessian官网:http://hessian.caucho.com

Hessian 可通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。也可Spring框架整合,通过它的 DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,建议采用面向接口编程,Hessian服务通过接口暴露。
 

Hessian处理过程示意图:客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果

四、Hessian入门范例

1.去Hessian官网:http://hessian.caucho.com下载最新的Hessian包,我下载的是hessian-4.0.51.jar

2.搭建Hessian服务端HessianServer【Dynamic Web Project 】,lib文件夹中加入hessian-4.0.51.jar

hessian.model.User

package hessian.model;

import java.io.Serializable;

public class User implements Serializable{

    private static final long serialVersionUID = 1692800630322115854L;
    //name属性
    private String name;

    public User() {
        
    }

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    
}

hessian.service.IService

package hessian.service;

import hessian.model.User;

public interface IService {
	 public User getUser();

}

hessian.service.impl.ServiceImpl

package hessian.service.impl;

import hessian.model.User;
import hessian.service.IService;

public class ServiceImpl implements IService {

	@Override
	public User getUser() {
		// TODO Auto-generated method stub
		return new User("the Big Dipper");
	}

}

利用Eclipse将HessianServer服务端Export成HessianServer.jar,以供客户端调用使用

3.将HessianServer部署到Tomcat下,直接访问http://localhost:8181/HessianServer/ServiceServlet,若浏览器页面出现:Hessian Requires POST,则说明配置和接口编写正确

4.搭建Hessian客户端HessianClient【Dynamic Web Project 】,lib文件夹中加入hessian-4.0.51.jar、HessianServer.jar【服务端源码】

hessian.client.HessianClientTest

package hessian.client;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;

import hessian.model.User;
import hessian.service.IService;

//Client Implementation
public class HessianClientTest {
	public static void main(String[] args) throws MalformedURLException {
		//在服务器端的web.xml文件中配置的HessianServlet映射的访问URL地址
        String url = "http://localhost:8181/HessianServer/ServiceServlet";
        HessianProxyFactory factory = new HessianProxyFactory();
        IService service = (IService) factory.create(IService.class, url);//创建IService接口的实例对象
        User user = service.getUser();//调用Hessian服务器端的ServiceImpl类中的getUser方法来获取一个User对象
        System.out.println(user.getName());
		
	}

}

5.将HessianServer部署到Tomcat下,然后运行HessianClient客户端,运行结果如下:the Big Dipper

6.至此,Hessian的HelloWorld项目编写测试完成

 

参考文档:

1. http://www.cnblogs.com/xdp-gacl/p/3897534.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值