Hession学习一

来源:互联网 发布:lil pump 知乎 编辑:程序博客网 时间:2024/05/22 14:48

hession学习的话,还是看这篇帖子吧    http://blog.csdn.net/mawming/article/details/52151879


远程通讯协议的基本原理

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

Java中BIO,NIO,AIO的支持:

Java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务端就需要启动一个线程进行处理,如果这连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

Java NIO:同步并阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮训到连接有I/O请求时才启动一个线程进行处理。

Java AIO: 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是有OS先完成了,再通知服务器应用去启动线程进行处理。

BIO、NIO、AIO适用场景分析:

  • BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

  • NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

  • AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。


另外,I/O属于底层操作,需要操作系统支持,并发也需要操作系统的支持,所以性能方面不同操作系统差异会比较明显。


Hession之应用级协议Binary-RPC

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

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

1、客户端发起请求,按照Binary -RPC协议将请求信息进行填充;

2、填充完毕后将二进制格式文件转化为流,通过传输协议进行传输;

3、接收到在接收到流后转换为二进制格式文件,按照Binary -RPC协议获取请求的信息并进行处理;

4、处理完毕后将结果按照Binary -RPC协议写入二进制格式文件中并返回。

         问题总结:

1、传输的标准格式是?

    标准格式的二进制文件。

2、怎么样将请求转化为传输的流?

    将二进制格式文件转化为流。

3、怎么接收和处理流?

    通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入XML中返回。

4、传输协议是?

Http。


Hessian是由caucho提供的一个基于binary-RPC实现的远程通讯library。

1、是基于什么协议实现的?

基于Binary-RPC协议实现。

2、怎么发起请求?

需通过Hessian本身提供的API来发起请求。

3、怎么将请求转化为符合协议的格式的?

Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。

4、使用什么传输协议传输?

Hessian基于Http协议进行传输。

5、响应端基于什么机制来接收请求?

响应端根据Hessian提供的API来接收请求。

6、怎么将流还原为传输格式的?

Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。

7、处理完毕后怎么回应?

             处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。

Hessian的初衷是支持动态类型,格式紧凑,跨语言.

Hessian协议的设计目标如下:

l  可序列化类型必须是可以自描述的, i.e. 不需要额外的模式(schema)或接口定义.

l  必须是语言独立的包括对脚本语言的支持.

l  It must be readable or writable in a single pass.

l  必须设计紧凑.

l  必须足够简单,以便测试和实现.

l  高效率.

l  必须支持Unicode字符集.

l  支持8-bit二进制数据,without escaping or using attachments.

l  必须支持加密压缩签名 and transaction context envelopes.


总结:得益于hessian序列号和反序列化的实现机制,hessian序列化的速度很快,而且序列化后的字节数也较其他技术少。


0 0
原创粉丝点击