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转成对象这种方式灵活使用。
RPC框架——简单高效hessian的使用方式的更多相关文章
- 分布式架构的基石.简单的 RPC 框架实现(JAVA)
前言 RPC 的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务. 学习来源:<分布式系统架构:原理与实践> - 李林锋 1. ...
- 微服务RPC框架选美
原文:http://p.primeton.com/articles/59030eeda6f2a40690f03629 1.RPC 框架谁最美? Hello,everybody!说到RPC框架,可能大家 ...
- 主流RPC框架详解,以及与SOA、REST的区别
什么是RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC使 ...
- RPC架构简单理解
RPC(Remote Promote Call) 一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简单.透明.RPC框架负责屏蔽底层的传输方式(TCP ...
- 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...
- 浅谈RPC框架
RPC(Remote Promote Call) RPC(Remote Promote Call):一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简 ...
- 如何从0到1设计一个类Dubbo的RPC框架
之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设 ...
- Java实现简单的RPC框架
一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...
- Java实现简单的RPC框架(美团面试)
一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...
随机推荐
- python基础学习笔记6--异常
异常 1.什么是异常? python用异常对象来表示( exception object)异常情况.如果异常没有被处理或扑捉,程序就会所谓的回溯(TraceBack,一种错误信息)而终止执行: 2. ...
- css 自适应布局阮一峰
转载一篇文章: 自适应网页设计(Responsive Web Design) 作者: 阮一峰 移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小 ...
- MySQL具体解释(19)----------海量数据分页查询优化
分页的详细解说解说请看http://blog.csdn.net/u011225629/article/details/46775947 查看代码打印1 SELECT * FROM table ORDE ...
- Oracle中NVARCHAR2与VARCHAR2的差别
NVARCHAR2在计算长度时和字符集相关的: 比如数据库是中文字符集时以长度10为例, 1.NVARCHAR2(10)是能够存进去10个汉字的.假设用来存英文也仅仅能存10个字符. 2.而VARCH ...
- raphael入门到精通---属性和事件篇
属性的使用 上一篇文章我们介绍了raphael如何生成基本的图形(元素),对于每个元素来讲,我们可以添加很多的元素(attr) 下面我就来简单的介绍下元素属性的使用(path元素属性我后面单独列出来介 ...
- UltraISO做U盘启动盘教程
用UltraISO做U盘启动盘教程 注意:制作前请先备份u盘内重要文件 vista.win7系统需要以管理员身份运行UltraISO,其他系统直接运行即可 1.打开UltraISO选择iso镜像文件 ...
- 拿别人APP的IPA包及你看上的图片
闲话不多说, 开工 在MacX下载Itools软件,并安装,直接在百度上搜也能找到.Itools挺强大的,我在这里推荐一下. 在Itools中点击资源库,如果你连接上你的iPhone,这个按钮就在右上 ...
- PHPExcel 导出
<?php include '../init.inc.php'; include "../db.inc.php"; /* @func 引入类 */ include ROOT. ...
- Android NDK开发(1)----- Java与C互相调用实例详解
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/13/2394153.html 一.概述 对于大部分应用开发者来说可能都不怎么接触到NDK,但如果 ...
- HDOJ 1166.敌兵布阵
2015-06-08 问题简述: 原题的题意相当于有一些连续摆放的箱子,里面装着球,球的数量可以加减,现要查询几个连续的箱子里球的总数,其中存在放球和拿球的操作. 原题链接:http://acm.hd ...