Hprose

       不知不觉现在已经是16年5月的月底了,春天悄悄的过去,夏天正蹒跚的走来,坐在办公室,穿着春天的衣服,感受着从空调中吹出来的阵阵冷风,盯着眼前电脑上的代码,突然发现,写了多少年的代码都是这样的,写一个接口,再写一个接口的实现类,再写一个方法,在中调用这个类,想起前几天学习的时候,看到的服务这个名词,再看看我写的代码,其实也就是一个服务,他提供方和消费方,提供方就是我写的接口+接口实现,消费方就是那个调用实现类中的方法,只不过是我是在本地调用罢了。

       在看我们整个互联网公司,我们经常遇到这样的情况,公司提供很多个大大小小的服务,各个服务不在同一个机器上,也可能不在同一个IP上,也可能由不同的团队来负责着。但是服务同服务之间总有有的地方需要通信,总有这个团队需要调用另外一个团队服务的时候,可是我该怎么调用别人的服务?又该怎么发布自己的服务让别人来调用?如果,我需要调用别人的服务,这就避免不了网络通信的过程吧,那我是不是需要写好多关于网络通信的代码,可是网络通信我不懂怎么办,从网上找找,出错了,还得调试好久怎么办?有没有一种方式就像我调用本地服务那样简单呢?

      在众多这种服务提供与调用的方式中,像什么WebService,现在新型的Rest,Hprose也是一种能方便提供服务与服务之间调用的协议,Hprose作为一种RPC调用方式,它让通信整个透明化,对通信的细节进行封装,我们不需要再像Rest那样去关心通信协议。而且Hprose轻量级、跨语言、跨平台,简单易用,功能强大,你能在官网找到java的Hprose,也能找到JS的Hprose,不行你可以去查官网,感觉Hprose的功能强大的不要不要的。

      都说了这么多,那Hprose作为服务端是如何工作的呢?

      第一:引入Hprose的对应的jar包,叫hprose-java-1.4.0.jar;

      第二:新建Service类

 

    public class Services {
	public String Hello(String name){
	    return "hello" +name;
	}
    }

      

       第三:新建Servlet   

 

   import hprose.common.HproseMethods;
   import hprose.server.HproseServlet;
   public class HproseServletDemo extends HproseServlet {
	private static final long serialVersionUID = 1L;
	@Override
	public void setGlobalMethods(HproseMethods methods) {
		super.setGlobalMethods(methods);
		//new出service对象,发布类里面所有的公共方法
		Services ss = new Services();
		methods.addMethod("Hello", ss);
	}
    }

 

       第四:配置WebXml

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xm    l/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.s    un.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" versi    on="3.0">
     <display-name>Archetype Created Web Application</display-name>
     <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:/spring-*.xml</param-value>
     </context-param>
   
     <servlet>
       <servlet-name>HproseServlet</servlet-name>
       <servlet-class>
            com.bobjy.demo.HproseServletDemo
       </servlet-class>
     </servlet>
     <servlet-mapping>
        <servlet-name>HproseServlet</servlet-name>
        <url-pattern>/hproseservice</url-pattern>
     </servlet-mapping>
 
   </web-app>

       就这样,Hprose的服务端就建立了,这同我们如同平时构建Springmvc+Spring+Hibernate架构,往框架中填写细节有什么区别呢?只需要建立对应的Hprose的客户端就可以了。

      客户端的建立:

         客户端的建立,通过invoke方法来调用服务端,访问服务端的服务,如下所示,你没有发现多余的关于网络通信的东西。

    public static void main(String[] args) {
	HproseHttpClient client = new HproseHttpClient();
	client.useService("http://localhost:8080/HproseDemo/hproseservice");
	try {
	     String str = (String) client.invoke("Hello", new Object[]{"hprose"});
	     System.out.println(str);
	} catch (IOException e) {
	     e.printStackTrace();
	}
    }

     

        就这样,Hprose的服务端和客户端的建立就这样完成了。话说客户端能够这样自由不管网络通信,直接像调用本地方法一样调用远程服务,我在想那么客户端是不是在接收到调用的方法名称,方法参数后,将其经过特殊包装后成为一个消息体,让其能够通过网络传输,而且还要负责找到使用的服务地址,然后将消息体发送给服务端,服务端在收到这些消息体后,应该有个解码的过程,将消息体拆开,然后根据调用的方法地址进行方法调用。方法调用返回的结果再次经过服务端的特殊包装传回客户端,客户端也需要对应的进行解码,然后得到相应的结果。我在想,这大概就是Hprose中网络通信的透明化内容吧。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值