HESSIAN的技术实现简介
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。采用二进制RPC协议进行数据传输。 ?
依托HTTP协议,在其上发送二进制数据信息,其使用的ContentType为x-application/hessian。 客户端代理用户的请求,将调用的方法和参数值进行二进制编码,通过指定的URL打开HTTP连接,将数据传输到服务器端。服务器端URL对应的Servlet接收到数据后,进行解析,交给具体实现类完成调用,然后将返回值编码发回客户端。
通过HessianProxyFactory.create()方法,产生用户指定Interface的实例。具体实例的实现由JDK的Proxy代理机制来负责。在Proxy生成实例时,传入的InvocationHandler接口实例为HessianProxy。 当客户端调用时,所有的操作都由HessianProxy来负责:主要是将调用的方法、参数写入到URL指定的连接中。然后对返回的数据进行解析,返回给用户。 其主要方法实现: public Object invoke(Object proxy,Method method,Object []args) { .... conn = sendRequest(mangleName,args); is =getInputStream(conn); .... int code =is.read(); ..... }
服务器端的入口类为HessianServlet,它通过ServletConfig中的home-class参数,获取具体功能的实现类名,并生成实例。通过home-api参数,获取实现的接口类。然后接受客户端的POST请求,将请求中的数据交给HessianSkeleton处理。 是服务器端的核心处理类,它持有具体实现类实例,并将指定的类中的方法全部进行缓存。其处理调用请求的过程如下: 1.????? 从请求中解析出方法名(string)和参数值。 2.????? 从缓存中获取到对应的方法(Method),然后调用实例中的对应实现方法:method.invoke(service,values); 3.????? 如果获取不到对应的方法(即接口中没有定义),将向连接中写入错误信息:NoSuchMethodException。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在当前项目和插件组中找不到前缀’docker’的插件
- Getting Started with AngularJS1.5 and ES6:par
- angularjs – 离子平台准备好的事件发生两次
- 15天玩转redis —— 第十篇 对快照模式的深入分析
- scala – Akka Stream Kafka vs Kafka Streams
- bash – 将一系列矩阵文件转换为awk中的坐标索引
- bootstrap$
- angular2 ng2-router 路由,嵌套路由详解
- angularjs – AngBind中ngBind,ngBindHtm和ngBin
- WebService大讲堂之Axis2(2):复合类型数据的传