這個項目最先(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推送的聊天室例子。 java
Tatala最大的特色是簡單,性能是第二考慮可以知足大部分應用就行。由於性能能夠經過增長機器獲得提高,而代碼簡單意味着僱更少的人更快的開發。老闆省錢,程序員輕鬆纔是最重要的。
開源地址:
https://github.com/zijan/Tatala
下面是簡單介紹。
概述
Tatala是一個簡單易用的RPC中間件,而且跨語言跨平臺。它將調用方法轉變成字節數組(包括被調用類名,目標方法名,參數序列和返回值),在socket基礎上實現客戶端和服務器之間的互相通訊。
目前,Tatala支持Java的客戶端與服務器端,和C#的客戶端。
特性
* 簡單易用能夠快速開發和創建網絡組件
* 跨語言跨平臺
* 高性能和分佈式
* 傳輸協議爲短小精悍的二進制
* 支持長短兩種socket 鏈接
* 客戶端與服務器端多線程處理
* 支持異步請求
* 對於大數據支持壓縮傳輸 git
* 支持服務器端主動推送消息
程序員
* 可以用於跨語言的遠程方法調用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