`
zijan
  • 浏览: 64545 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

分享一个简单易用的RPC开源项目—Tatala

阅读更多
这个项目最早(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
分享到:
评论

相关推荐

    jedis示例代码压缩包

    jedis示例代码

    高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料

    【资源说明】 高分课程设计 QT5.7+Sqllite数据库小系统源码+部署文档+全部数据资料 可实现数据库的可视化操作:增、删、改、查.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    中文文本分类 传统机器学习+深度学习.zip

    中文文本分类 传统机器学习+深度学习

    Linux学习笔记4-点亮LED灯(汇编裸机)程序

    Linux学习笔记4---点亮LED灯(汇编裸机)程序

    英特尔杯软创大赛RCDancer项目组工程文件夹.zip

    英特尔杯软创大赛RCDancer项目组工程文件夹

    0011后台管理模板AdobeXD源码下载设计素材UI设计.xd

    0011后台管理模板AdobeXD源码下载设计素材UI设计

    高分毕业设计 基于Spark2.x新闻网大数据实时分析可视化系统项目源码+部署文档+全部数据资料.zip

    【资源说明】 高分毕业设计 基于Spark2.x新闻网大数据实时分析可视化系统项目源码+部署文档+全部数据资料.zip高分毕业设计 基于Spark2.x新闻网大数据实时分析可视化系统项目源码+部署文档+全部数据资料.zip 【备注】 1、该项目是高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    Netty实现大文件分块传输详解.pdf

    java Netty实现大文件分块传输详解

    Hotel_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计.xd

    Hotel_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计

    公司年会各种总结发言稿样稿范文word版本资料

    +公司年会总结发言 年会总结 年总结发言 年终总结发言稿 总结发言 龙总结发言 公司年会总结发言 +年会发言稿样稿 年会发言稿样稿01.doc 年会发言稿样稿02 年会发言稿样稿03 年会发言稿样稿04 \年会各种发言稿范文 主持人台词、主持人开场白、主持人串词大全 企业年会领导致辞范文(很经典) 优秀员工代表公司年会发言稿(幽默) 供应商代表年会发言稿 公司年会主持串词 公司年会主持人串词 公司年会主持台词 公司年会主持稿大全 公司年会主持词开始及结束语 公司年会总经理致词范文 公司年会领导讲话稿 员工代表年会发言稿 年会串词(最终版) 年会主持词 年会优秀发言稿结尾 年会游戏主持稿 年会董事长或总经理发言稿 总经理年会发言稿范文 新员工代表公司年会发言稿(范文) 最新公司年会发言稿 科技公司年会主持词串词 经销商年会公司领导发言稿(范文) 董事长年会致辞(简短有力)

    导航主页模板 html模板.zip

    导航主页模板 html模板

    理财管理(Spring boot+thymeleaf)

    该毕业设计使用了当前较为流行的spring boot,spring,spring mvc,mybatis,shiro框架分页处理使用了pagehelper进行操作 前台使用了模板语言thymeleaf,界面较为炫酷,适合年轻朋友。 开发工具采用的是IDEA。 该系统主要解决了理财中的一些问题,包含功能: 1. 权限管理 2.用户信息管理 3.理财产品管理等内容。

    SQL详细介绍资料.zip

    sql,SQL(Structured Query Language,结构化查询语言)是一种标准化的语言,用于在关系数据库管理系统(RDBMS)中存取和操作数据。SQL 使得用户能够访问和操作数据库中的数据,包括数据的查询、插入、更新和删除,以及数据库结构的创建和修改。

    基于海思3519DV500的网页无插件视频播放方案

    基于海思3519DV500的网页无插件视频播放方案

    windows-win32-direct3d12.pdf

    This programming guide contains information about how to use the Direct3D 12 programmable pipeline to create a customized graphics engine. The Direct3D 12 headers and libraries are part of the Windows 10 SDK. There is no separate download or installation required to use Direct3D 12

    网络安全课本资源.zip

    网络安全课本资源.zip

    stm32zet6使用TFTLCD事项亮屏

    stm32zet6使用TFTLCD事项亮屏

    [精品] todo_appAdobeXD源码下载设计素材UI设计.xd

    [精品] todo_appAdobeXD源码下载设计素材UI设计

    Company_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计.xd

    Company_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计

    HTML27-创意官网模板官网落地页APP主页产品宣传页源码 landing静态页面.zip

    HTML27-创意官网模板官网落地页APP主页产品宣传页源码 landing静态页面

Global site tag (gtag.js) - Google Analytics