hessian源码相对于spring操作事例演示课件.docxVIP

hessian源码相对于spring操作事例演示课件.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
  因为最近有点时间,所以就想读一些技术的源码,最近选择hessian。废话不多说,进入正题:   hessian客户端时序图: hessian服务端时序图:   因为hessian源码相对于spring算很简单了。所以不浪费大家宝贵的时间来分析源码。想说说怎么实现远程调用(rpc)。   远程调用,顾名思义就是通过远程调用别的机器(JVM or ...)中的方法。要想实现远程调用,思路是怎样呢?   常用的模式代理,工厂。为啥怎么说呢?   远程调用通过网络,肯定需要工厂产出不同的类,不然一个类写,会死人的。   代理模式,因为调用前你是不知道实际的调用,肯定是通过代理调用到远程方法。   下面给大家说说远程调用的原理(PS:不懂代理的同学,先上百度搜索:java代理)。   实现自定义的远程调用,就是序列化成字节流后,发送到服务端,服务端根据调用的api、方法、参数去具体调用一个方法,调用方法后把结果输入到输出流里面,最后结果展示在代理的return中。   ok,开始贴代码:   客户端(HttpRpcClient): 1 String url =?http://localhost:8080/hessian-study-server/helloworld1; 2 ????????HttpProxyFactory factory =?new?HttpProxyFactory(); 3 ????????Class? clazz = Class.forName(com.jzx.hessian.server.SayHelloService); 4 ????????SayHelloService sayHelloService = (SayHelloService) factory.create(clazz, url); 5 ????????System.out.println(sayHelloService.sayHello(小明,?男)); 6 ????????UserVo vo = sayHelloService.sayHello1(小明,?男); 7 ????????System.out.println(姓名:?+ vo.getName() +? 性别:?+ vo.getSex());   从代码中分析,首先创建了一个工厂类HttpProxyFactory,其次创建了一个类的描述。   HttpProxyFactory代码(主要目的是得到一个代理): 1 if?(api ==?null) { 2 ????????????throw?new?NullPointerException(api must not be null for HttpProxyFactory.create()); 3 ????????} 4 ????????InvocationHandler handler =?null; 5 ? 6 ????????handler =?new?HttpProxy(url,?this, api); 7 ? 8 ????????return?Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),?new?Class[] { api }, handler);   HttpProxy代理干了啥 (得到调用接口类、方法名、参数值): 1 HttpTransportation transportation =?new?HttpTransportation(); 2 ????????transportation.setClazz(api); 3 ????????transportation.setMethod(method.getName()); 4 ????????transportation.setParams(args); 5 ????????byte[] bytes = ObjectUtils.objectToByte(transportation); 6 ????????Object result = sendPost(url, bytes); 7 ????????return?result;   序列化对象发送POST请求: 01 PrintWriter out =?null; 02 ????????BufferedReader in =?null; 03 ????????Object result =?null; 04 ????????try?{ 05 ????????????URL realUrl =?new?URL(url); 06 ????????????// 打开和URL之间的连接 07 ????????????URLCo

文档评论(0)

xuefei111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档