zoukankan      html  css  js  c++  java
  • RPC框架——简单高效hessian的使用方式

    RPC(Remote Procedure Call Protocol)


    RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.methodname”形式。优点是跨语言跨平台,C端、S端有更大的独立性,缺点是不支持对象,无法在编译器检查错误,只能在运行期检查。

    RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

    关于JAVA中hessian的使用:


    服务端配置(接收数据方):

    1.    讲述如何配置Hessian的服务器端(与Spring集成)

    2.定义接口类

    package cn.demo.hessian;
    /**
     * 服务端接口
     * @author xiao
     *
     */
    public interface ISayHello {
    
    	public String sayHello(String arg1,String arg2);
    }
    

      

    3.接口实现类

    package cn.demo.hessian.impl;
    
    import cn.demo.hessian.ISayHello;
    /**
     * 服务端接口实现
     * @author xiao
     *
     */
    public class SayHelloImpl implements ISayHello {
    
    	public String sayHello(String arg1, String arg2) {
    		// TODO Auto-generated method stub
    		return "arg1="+arg1+",arg2="+arg2;
    	}
    
    }
    

      

    4.配置Web.xml

    <servlet>  
        <servlet-name>remote</servlet-name>  
        <!-- 使用Spring的代理Servlet -->  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <init-param>  
            <param-name>namespace</param-name>  
            <param-value>classes/remote-servlet</param-value>  
       </init-param>  
      <load-on-startup>1</load-on-startup>  
    </servlet>  
      
    <servlet-mapping>  
       <servlet-name>remote</servlet-name>  
       <url-pattern>/remote/*</url-pattern>  
    </servlet-mapping>  

    5.配置remote-servlet.xml[该文件位于src目录下,即编译后存在与classes下]:

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
    <beans>  
        <!-- 接口的具体实现类 -->  
        <bean id="helloImpl" class="cn.demo.hessian.impl.SayHelloImpl" />  
       <!-- 使用Spring的HessianServie做代理 -->  
        <bean name="/helloHessian"  
       class="org.springframework.remoting.caucho.HessianServiceExporter">  
           <!-- service引用具体的实现实体Bean-->  
            <property name="service" ref="helloImpl" />  
            <property name="serviceInterface" value="cn.demo.hessian.ISayHello" />  
        </bean>  
          
        <!-- 可以配置多个HessianServiceExporter代理Bean -->  
    </beans>  

    服务器端配置完毕。

    客户端配置(也就是所谓发送数据的一方):

    1.服务端接口,这里指服务端调用客户端的接口方法类,和客户端一致:

    package cn.demo.hessian.server;
    /**
     * 客户端接口
     * @author xiao
     *
     */
    public interface ISayHello {
    
    	public String sayHello(String arg1,String arg2);
    }
    

    2.beans.xml配置

    <bean id="helloClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
            <property name="serviceUrl">
    <!--服务端地址-->
                <value>http://127.0.0.1:8088/xs/remote/helloHessian</value>
            </property>
    <!--客户端接口-->
            <property name="serviceInterface" value="cn.demo.hessian.service.ISayHello"/>
    </bean>

    3.调用

    BeanFactory ac = new ClassPathXmlApplicationContext("classpath:/beans.xml");  
    ISayHello helloClient=(ISayHello)ac.getBean("helloClient");
    helloClient.sayHello("hello","hessian");

    完毕!!!


    ps:如果需要传输对象,可以转成json串,然后服务端通过json转成对象这种方式灵活使用。  

      

      

  • 相关阅读:
    TinyCMips
    C++坑点集合
    2017,不能再咸鱼了
    浅谈C语言变量声明的解析
    独自handle一个数据库大程有感
    Async Programming
    04python 中的各种推导式(python函数)
    03python 迭代器与生成器(python函数)
    02python 装饰器(python函数)
    01python 中的函数与函数式编程(python函数)
  • 原文地址:https://www.cnblogs.com/xiaoblog/p/4729309.html
Copyright © 2011-2022 走看看