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转成对象这种方式灵活使用。  

  

  

RPC框架——简单高效hessian的使用方式的更多相关文章

  1. 分布式架构的基石.简单的 RPC 框架实现(JAVA)

    前言 RPC 的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务. 学习来源:<分布式系统架构:原理与实践> - 李林锋 1. ...

  2. 微服务RPC框架选美

    原文:http://p.primeton.com/articles/59030eeda6f2a40690f03629 1.RPC 框架谁最美? Hello,everybody!说到RPC框架,可能大家 ...

  3. 主流RPC框架详解,以及与SOA、REST的区别

    什么是RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC使 ...

  4. RPC架构简单理解

    RPC(Remote Promote Call) 一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简单.透明.RPC框架负责屏蔽底层的传输方式(TCP ...

  5. 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架

    在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...

  6. 浅谈RPC框架

    RPC(Remote Promote Call) RPC(Remote Promote Call):一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简 ...

  7. 如何从0到1设计一个类Dubbo的RPC框架

    之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设 ...

  8. Java实现简单的RPC框架

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

  9. Java实现简单的RPC框架(美团面试)

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

随机推荐

  1. mysql数据库指令导入导出

    mysql数据库导出使用  /mysql/bin/mysqldump指令 数据库导出 导出指令: [mysql安装目录]/bin/mysqldump -u[username] -p[password] ...

  2. PCB板上镀镍厚度

    PCB制造工业由于成本.周期时间和材料兼容性的原因,对减少沉淀在电路板上的镍的数量感兴趣.最小镍的规格应该帮助防止铜对金表面的扩散.保持良好的焊接点强度.和较低的接触电阻.最大镍的规格应该允许板制造的 ...

  3. Codeforces 700B Connecting Universities(树形DP)

    [题目链接] http://codeforces.com/problemset/problem/700/B [题目大意] 给出 一棵n个节点的树, 现在在这棵树上选取2*k个点,两两配对,使得其配对的 ...

  4. ios学习Day3

    bool 数据类型 #define TRUE 1// #define FALAE 0 #define BOOL int Bool flag=1; bool型 实质上是 int型 c89没有提供 c99 ...

  5. hough变换是如何检测出直线和圆的?

    (I)直线篇 1 直线是如何表示的?对于平面中的一条直线,在笛卡尔坐标系中,常见的有点斜式,两点式两种表示方法.然而在hough变换中,考虑的是另外一种表示方式:使用(r,theta)来表示一条直线. ...

  6. Java反射的小故事

    Java反射的小故事: 首先定义一个Java类 package com.xiaoysec.test; public class Person { private String name; privat ...

  7. poj 3304 计算几何

    大意: 是否存在一条直线,使所有线段在直线上的投影至少交与一点 思路: 转换为是否存在一条直线与所有的线段相交,做这条直线的垂线,那么垂线即为所求 **/ #include <iostream& ...

  8. IOS 表视图(UITableVIew)的使用方法(7)表视图的编辑功能(拖拉调整排序位置)

    除了每个单元行左边的删除和新增图标,UITableView还支持在单元行的右侧显示一个供用户拖拉调整排序位置的控件. 不过如果要显示此控件,UITableView的数据源需要实现以下的方法. -(vo ...

  9. MyEclipse 8.5整合Git,并在Github上发布项目(转)

    下载Eclipse的git插件——EGit.下载网址http://download.eclipse.org/egit/updates-1.3/org.eclipse.egit-updatesite-1 ...

  10. QT IP输入框正则表达式(使用QLineEdit的setValidator函数)

    /* ip输入框正则表达式 */ // IP 前3段 QRegExp regExp("[0-9][0-9.][0-9.][.]"); ui->lineEdit_1->s ...