精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-04-08
最后修改:2014-04-09
关于性能,当时后台相应请求的效率是每秒10W次,现在我在自己的笔记本上测,只有一个客户端与服务器都在一个物理机上(CPU: i7-3610QM; RAM: 8G; OS: Win7-64),每秒响应12000个请求。 tatala-client-csharp已经上传,同样在笔记本上测试,一个c#客户端一个Java服务端都在一台机器上,每秒响应22000个请求。c#客户端除了性能测试的例子还有一个演示Server推送的聊天室例子。 Tatala最大的特点是简单,性能是第二考虑能够满足大部分应用就行。因为性能可以通过增加机器得到提升,而代码简单意味着雇更少的人更快的开发。老板省钱,程序员轻松才是最重要的。 开源地址: https://github.com/zijan/Tatala 下面是简单介绍。 概述 Tatala是一个简单易用的RPC中间件,并且跨语言跨平台。它将调用方法转变成字节数组(包括被调用类名,目标方法名,参数序列和返回值),在socket基础上实现客户端和服务器之间的互相通信。 目前,Tatala支持Java的客户端与服务器端,和C#的客户端。 特性 * 简单易用可以快速开发和建立网络组件 * 跨语言跨平台 * 高性能和分布式 * 传输协议为短小精悍的二进制 * 支持长短两种socket 连接 * 客户端与服务器端多线程处理 * 支持异步请求 * 对于大数据支持压缩传输 * 支持服务器端主动推送消息 * 能够用于跨语言的远程方法调用RPC,高性能的缓存服务器,分布式的消息服务,多人在线游戏服务器,等等 快速开始 下载tatala.jar 包含在你项目的classpath中。 简单是Tatala第一考虑因素,所以用它建立RPC的方式,让开发者感觉就像调用本地普通方法一样简单。不用考虑网络,线程这些东西。 现在举一个例子,假如我们有个服务器端的服务TestManager接口 和 TestManagerImpl实现类。 TestManager.java public interface TestManager { public String sayHello(int Id, String name); } TestManagerImpl.java public class TestManagerImpl implements TestManager{ public String sayHello(int Id, String name) { return "["+Id+"]"+"Hello "+name+" !"; } } 我们还需要在服务端建立一个socket服务类来部署我们的业务逻辑,在这个例子中socket服务监听端口是10001。 TestServer.java public class TestServer { public static void main(String args[]) { int listenPort = 10001; int poolSize = 10; AioSocketServer server = new AioSocketServer(listenPort, poolSize); server.start(); } } 然后客户端的代码类似这样: EasyClient.java public class EasyClient { private static TransferObjectFactory transferObjectFactory; private static TestManager manager; public static void main(String[] args) { transferObjectFactory = new TransferObjectFactory("test1", true); transferObjectFactory.setImplClass("TestManagerImpl"); manager = (TestManager)ClientProxyFactory.create(TestManager.class, transferObjectFactory); int Id = 18; String name = "JimT"; String result = manager.sayHello(Id, name); System.out.println("result: "+result); } } 当然我们需要把接口类(TestManager.class) 加入到客户端的classpath里。客户端还需要一个配置文件controller.xml列出要被客户端调用的服务器端程序的IP, port和连接名。 (注意连接名“test1”) controller.xml <connections> <connection> <hostIp>127.0.0.1</hostIp> <hostPort>10001</hostPort> <timeout>5000</timeout> <retryTime>3</retryTime> <name>test1</name> </connection> </connections> 这就是所有代码和配置对于建立一个Tatala RPC。 更多例子请看教程。 Tatala-中文教程 传输协议 在客户端把调用的方法信息设置到transfer object里, Tatala把transfer object转换成字节数组并且发送给服务器。在服务器端把接收到的字节数组再还原成包含调用信息的transfer object。包括被调用类名,目标方法名,参数信息和返回类型等。Tatala 执行器获得调用信息执行目标方法。 支持类型 Tatala支持的参数和返回类型: bool,byte,short,chat,int,long,float,double,Date,String, byte[],int[],long[],float[],double[],String[],Serializable,WrapperClass 其它描述 需要JDK1.7,因为使用了Java AIO。 第三方类库包括XSteam,Log4j。 License Apache License Version 2.0 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-04-09
看了内容后,让我想起二个东西:Thirft和PropBuf。
|
|
返回顶楼 | |
发表时间:2014-04-09
freezingsky 写道 看了内容后,让我想起二个东西:Thirft和PropBuf。
有了thrift和protocolbuf后, rpc的问题可以说都已经解决了. |
|
返回顶楼 | |
发表时间:2014-04-09
最后修改:2014-05-09
jimmee 写道 freezingsky 写道 看了内容后,让我想起二个东西:Thirft和PropBuf。
有了thrift和protocolbuf后, rpc的问题可以说都已经解决了. 是呀,做这个项目是在2007年底,如果当时就有那两个解决方案,我也不用那么费劲了,可是那时啥都没有。虽然后来各种RPC雨后春笋,但还是用自己的东西更舒服。 另外Tatala支持byte[]作为参数传递,所以可以把复杂的Object通过Protocolbuf转换成byte[]再传递。Tatala有wrapper class实现了复杂Object的传输,可以用户自己决定用哪个。 |
|
返回顶楼 | |
发表时间:2014-04-09
zijan 写道 jimmee 写道 freezingsky 写道 看了内容后,让我想起二个东西:Thirft和PropBuf。
有了thrift和protocolbuf后, rpc的问题可以说都已经解决了. 是呀,做这个项目是在2007年底,如果当时就有那两个解决方案,我也不用那么费劲了,可是那时啥都没有。虽然后来各种RPC雨后春笋,但还是用自己的东西更舒服。 2007年,有AIO吗? |
|
返回顶楼 | |
发表时间:2014-04-10
最后修改:2014-04-11
freezingsky 写道 zijan 写道 jimmee 写道 freezingsky 写道 看了内容后,让我想起二个东西:Thirft和PropBuf。
有了thrift和protocolbuf后, rpc的问题可以说都已经解决了. 是呀,做这个项目是在2007年底,如果当时就有那两个解决方案,我也不用那么费劲了,可是那时啥都没有。虽然后来各种RPC雨后春笋,但还是用自己的东西更舒服。 2007年,有AIO吗? 2007年JDK1.7还没发布,所以传输部分用的是Mina。后来用AIO发现性能比Mina快好多(win系统下),就改用AIO了。没准以后会把Mina模式加上,因为现在好多公司还在用JDK1.6。 |
|
返回顶楼 | |
发表时间:2014-04-14
AIO在不同os下实现方式不同,windows下是用IOCP实现的,可以说是真正意义上的AIO;而linux下目前都是用epoll或类似epoll的方式模拟的
|
|
返回顶楼 | |
发表时间:2014-04-14
jimmee 写道 freezingsky 写道 看了内容后,让我想起二个东西:Thirft和PropBuf。
有了thrift和protocolbuf后, rpc的问题可以说都已经解决了. protocol buffer 根本不带rpc协议。 虽说有很多第三方的开源组建在protobuf的基础上实现了自己的开源协议但对多语言的支持都不好。 thrift确实是好东西。 |
|
返回顶楼 | |
发表时间:2014-04-16
最后修改:2014-04-16
还有一头项目叫做ICE, 可以参考。 http://zeroc.com/
和thrift类似。 |
|
返回顶楼 | |
发表时间:2014-04-18
还有一个项目叫做 Hprose,可以参考。https://github.com/hprose
比 protocol buffer,thrift 用起来简单,灵活。 |
|
返回顶楼 | |