支持状态对象复用的RPC框架——SnakeRPC
SnakeRPC是我2年前(春节期间!)做的一个RPC框架,现与大家分享。
设计SnakeRPC的主要动机是,Hessian返回的状态对象(如:数据库连接对象、文件对象等)无法复用,而且它对Stream类型的参数数目有限制。SnakeRPC完美的解决了这两个问题。
托管地址:https://github.com/bluejoe2008/snake-rpc
如下附上项目说明,以后有空了会附上中文版:)
snake-rpc
An RPC framework based on Hessian(http://hessian.caucho.com)
the name 'snake' comes from the Animal Year of snake in Chinese(the year 2013).
compared with hessian, snake-rpc has several new features:
- ablity to serialize InputStream/OutputStream;
- unlimited InputStream/OutputStream parameters;
- ablity to reuse remote objects returned by a method call;
for example:
Connection con = client.getConnection();
ResultSet rs = con.queryForResultSet("select * from users");
this feature is very useful for those objects which are valid only on the server-side, e.g, the Connection or ResultSet objects;
see https://github.com/bluejoe2008/snake-rpc/blob/master/test/cn/bluejoe/snake/client/SnakeClientTest.java for
example usage.
server
side codes
Step 1: since a SnakeServlet class is provided by snake-rpc, users can create a derived classes and register accessible service objects within init() methods:
public class MySnakeServlet extends SnakeServlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); //declares that FileObjects are only avaliable on server side _skeleton.declareServerSideObjectClass(FileObject.class); //register an object named file _skeleton.registerServiceObject("file", new FileObjectImpl(new File("./testdir"))); } }Step 2: configures the Servet in web.xml as normal.
- Step 3: start up web server.
client
side codes
Step 1: creates a SnakeClient first:
HttpHost hc = new HttpHost("http://localhost:8080"); _client = new SnakeClient(hc, "http://localhost:8080/rpc", "", "");Step 2: uses createServiceObjectProxy() to retrieve remote object:
FileObject fo = (FileObject) _client.createServiceObjectProxy("file", FileObject.class);Step 3: now you got the FileObject object, just call methods on it:
FileObject[] cfs = fo.listFiles(); Assert.assertEquals(1, cfs.length); FileObject cfs0 = cfs[0]; Assert.assertEquals(false, cfs0.isDirectory()); Assert.assertEquals(f1.length(), cfs0.length());
支持状态对象复用的RPC框架——SnakeRPC的更多相关文章
- Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架
本文首先介绍了什么是Apache Thrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thri ...
- 微博轻量级RPC框架Motan
Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...
- RPC框架性能基本比较测试
RPC框架:gRPC.Thrift.Wildfly.Dubbo 原文链接:http://www.open-open.com/lib/view/open1426302068107.html gRPC是G ...
- RPC框架基本原理(一):服务注册
什么是RPC框架 RPC整个过程涉及四类对象:客户端.客户端代理.服务端和服务端代理.RPC要求客户端和服务端之间约定好调用接口和传输格式(如JSON,Xml等),客户端在调用该接口时,由客户端的代理 ...
- 谁能用通俗的语言解释一下什么是 RPC 框架?
转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题 关于RPC你的题目是RPC框架,首先了解什么叫RP ...
- 谁能用通俗的语言解释一下什么是 RPC 框架
转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题~ 谁能用通俗的语言解释一下什么是 RPC 框架? ...
- 微博轻量级RPC框架Motan正式开源:支撑千亿调用
支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...
- 这样基于Netty重构RPC框架你不可能知道
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365天原创计划”第5天. 今天呢!灯塔君跟大家讲: 基于Netty重构RPC框架 一.CyclicBarrier方法说明 1. ...
- RPC 框架 Dubbo 从理解到使用(一)
技术架构演变 单一应用架构 通俗地讲,"单体应用(monolith application)"就是将应用程序的所有功能都打包成一个独立的单元.当网站流量很小时,只需一个应用,将所有 ...
随机推荐
- 28个MongoDB NoSQL数据库的面试问答
MongoDB是目前最好的面向文档的免费开源NoSQL数据库.如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答.这些MongoDB NoS ...
- 多进程解决datasnap支持的tcp长连接数量少的问题
对于实时采集数据的项目,应用场景比如是这样的:5000客户端,每个客户端每隔500MS要给服务器上传一次数据. 大家知道,像INDY这种阻塞型的通信控件,所能支持的TCP长连接的一般地不能超过1000 ...
- DOM 的选择器 API
在刚开始的时候,我们只能用 getElementById,getElementsByClassName,getElementsByTagName 这几个 DOM 方法查找 DOM 树中的元素.后来,在 ...
- 【UNIX】select、poll、epoll学习
三者都是UNIX下多路复用的内核接口,select是跨平台的接口,poll是systemV标准,epoll是linux专有的接口,基于poll改造而成. select 函数原型: int select ...
- 强大的代码生成工具MyGeneration
强大的代码生成工具MyGeneration 转 MyGeneration是一个功能很强大的代码生成工具.通过编写包含各种类型脚本(C#,VB.Net,JScript,VBScript)的模板,通过数据 ...
- java+hadoop+spark+hbase+scala+kafka+zookeeper配置环境变量记录备忘
java+hadoop+spark+hbase+scala 在/etc/profile 下面加上如下环境变量 export JAVA_HOME=/usr/java/jdk1.8.0_102 expor ...
- Spring Framework 5.0.0.M3中文文档 翻译记录 Part I. Spring框架概览1-2.2
Part I. Spring框架概览 The Spring Framework is a lightweight solution and a potential one-stop-shop for ...
- android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险 (3)
上节已经详细说了下注入过程,最后寄生进程在宿主进程中下了个蛋,这下完的蛋有什么作用呢?接下来再具体分析一下. lib0的感染过程分析 对于本例注入的so动态库,首先看一下so的符号: $ readel ...
- HDU 4608 I-number(模拟)
I-number Time Limit: 5000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 The I-number of x is defined t ...
- hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
Conturbatio Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=54 ...