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的更多相关文章

  1. Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架

    本文首先介绍了什么是Apache Thrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thri ...

  2. 微博轻量级RPC框架Motan

    Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...

  3. RPC框架性能基本比较测试

    RPC框架:gRPC.Thrift.Wildfly.Dubbo 原文链接:http://www.open-open.com/lib/view/open1426302068107.html gRPC是G ...

  4. RPC框架基本原理(一):服务注册

    什么是RPC框架 RPC整个过程涉及四类对象:客户端.客户端代理.服务端和服务端代理.RPC要求客户端和服务端之间约定好调用接口和传输格式(如JSON,Xml等),客户端在调用该接口时,由客户端的代理 ...

  5. 谁能用通俗的语言解释一下什么是 RPC 框架?

    转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题 关于RPC你的题目是RPC框架,首先了解什么叫RP ...

  6. 谁能用通俗的语言解释一下什么是 RPC 框架

    转载自知乎:https://www.zhihu.com/question/25536695 知乎上很多问题的答案还是很好的,R大就经常在上面回答问题~ 谁能用通俗的语言解释一下什么是 RPC 框架? ...

  7. 微博轻量级RPC框架Motan正式开源:支撑千亿调用

    支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...

  8. 这样基于Netty重构RPC框架你不可能知道

    原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365天原创计划”第5天. 今天呢!灯塔君跟大家讲: 基于Netty重构RPC框架 一.CyclicBarrier方法说明 1. ...

  9. RPC 框架 Dubbo 从理解到使用(一)

    技术架构演变 单一应用架构 通俗地讲,"单体应用(monolith application)"就是将应用程序的所有功能都打包成一个独立的单元.当网站流量很小时,只需一个应用,将所有 ...

随机推荐

  1. 【转载】shell中的特殊变量$

    shell中的特殊变量:变量名含义$0shell或shell脚本的名字$*以一对双引号给出参数列表$@将各个参数分别加双引号返回$#参数的个数$_代表上一个命令的最后一个参数$$代表所在命令的PID$ ...

  2. 有关ftp批量传送文件或文件夹

    以ftp 批量上传文件时 可以用 mput file1 file2 .. 但是这样没传送一个就会问是否传送下一个 ,那么可以使用prompt这个命令.这是个双向开关,执行一次是取消提示,在执行一次是打 ...

  3. JNI: Passing multiple parameters in the function signature for GetMethodID

    http://stackoverflow.com/questions/7940484/jni-passing-multiple-parameters-in-the-function-signature ...

  4. Android中使用sqlite笔记

    1.实现SQLiteHelper来在android中使用SQLite.代码如下,来自android官网. public class FeedReaderDbHelper extends SQLiteO ...

  5. A Tour of Go Map literals

    Map literals are like struct literals, but the keys are required. package main import "fmt" ...

  6. python 输出字符串如果遇到字典

    >>> d = {'a':1} >>> print '%s' % 1,d 1 {'a': 1} >>> print '%s %s' % 1,d T ...

  7. stm32f10x.h文件分析理解

    今天再看过半年前自己写的这篇发现自己当时理解有误,stm32f10x.h与库开发并未存在太大关系,只是一个最为重要的寄存器地址到寄存器结构体变量的映射. stm32f10x.h 这个头文件是STM32 ...

  8. nyoj 69 数的长度

    数的长度 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出 ...

  9. 低级错误之Oracle客户端添加数据

    本来可以为空的外键,自己非要写一个无意义的值,导致数据保存失败.

  10. [css]display: table-cell,用div做分列布局

    table-cell我们却能用得到,而且是用它来干一件很重要的事情——多列布局. 多列布局在css中有多重要就不用我说了吧,传统模式下大家都使用float来解决这一问题,但是float写出来的东西代码 ...