这个项目最早(2008年)是用于一个网络游戏的Cache Server,以及一个电子商务的Web Session服务。后来不断增加新的功能,除了Java还支持C#,到现在已经可以用它来开发网络游戏的服务器。等过些日子我还会开源网络游戏的服务器源码。
关于性能,当时后台相应请求的效率是每秒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
分享到:
相关推荐
李白高力士脱靴李白贺知章告别课本剧.pptx
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
C语言项目之超级万年历系统源码,可以做课程设计参考 文章参考:https://www.qqmu.com/4373.html
Jupyter-Notebook
51单片机加减乘除计算器系统设计(proteus8.17,keil5),复制粘贴就可以运行
《中国房地产统计年鉴》面板数据资源-精心整理.zip
Jupyter-Notebook
Jupyter-Notebook
毕业论文答辩ppt,答辩ppt模板,共18套
Jupyter-Notebook
《中国城市统计年鉴》面板数据集(2004-2020年,最新).zip
Python基础 本节课知识点: • set的定义 • Set的解析 • set的操作 • set的函数
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
兵制与官制研究资料最新版.zip
Jupyter-Notebook
七普人口数据+微观数据+可视化+GIS矢量资源-精心整理.zip
Support package for Hovl Studio assets.unitypackage
土壤数据库最新集.zip
Jupyter-Notebook
1991-2020年中国能源统计年鉴-能源消费量(分省)面板数据-已更至最新.zip