RPC中間件:Tatala

jopen 10年前發布 | 21K 次閱讀 Tatala 常用工具包

這個項目最早(2008年)是用于一個網絡游戲的Cache Server,以及一個電子商務的Web Session服務。后來不斷增加新的功能,除了Java還支持C#,到現在已經可以用它來開發網絡游戲的服務器。等過些日子我還會開源網絡游戲的服務器源碼。 

關于性能,當時后臺相應請求的效率是每秒10W次,現在我在自己的筆記本上測,只有一個客戶端與服務器都在一個物理機上(CPU: i7-3610QM; RAM: 8G; OS: Win7-64),每秒相應12000個請求。 

Tatala最大的特點是簡單,性能是第二考慮能夠滿足大部分應用就行。因為性能可以通過增加機器得到提升,而代碼簡單意味著雇更少的人更快的開發。老板省錢,程序員輕松才是最重要的。 

下面是簡單介紹。 

概述 
Tatala是一個簡單易用的RPC中間件,并且跨語言跨平臺。它將調用方法轉變成字節數組(包括被調用類名,目標方法名,參數序列和返回值),在socket基礎上實現客戶端和服務器之間的互相通信。 

目前,Tatala支持Java的客戶端與服務器端,和C#的客戶端。 

特性 
* 簡單易用可以快速開發和建立網絡組件 
* 跨語言跨平臺 
* 高性能和分布式 
* 傳輸協議為短小精悍的二進制 
* 支持長短兩種socket 連接 
* 客戶端與服務器端多線程處理 
* 支持異步請求 
* 對于大數據支持壓縮傳輸 
* 能夠用于跨語言的遠程方法調用RPC,高性能的緩存服務器,分布式的消息服務,多人在線游戲服務器,等等 

快速開始 
下載tatala.jar 包含在你項目的classpath中。 

簡單是Tatala第一考慮因素,所以用它建立RPC的方式,讓開發者感覺就像調用本地普通方法一樣簡單。不用考慮網絡,線程這些東西。 

現在舉一個例子,假如我們有個服務器端的服務TestManager接口 和 TestManagerImpl實現類。 

TestManager.java 

Java代碼  

  1. public interface TestManager {  

  2.     public String sayHello(int Id, String name);  

  3. }  


TestManagerImpl.java 

Java代碼  

  1. public class TestManagerImpl implements TestManager{  

  2.     public String sayHello(int Id, String name) {  

  3.         return "["+Id+"]"+"Hello "+name+" !";  

  4.     }  

  5. }  


我們還需要在服務端建立一個socket服務類來部署我們的業務邏輯,在這個例子中socket服務監聽端口是10001。 
TestServer.java 

Java代碼  

  1. public class TestServer {  

  2.     public static void main(String args[]) {  

  3.         int listenPort = 10001;  

  4.         int poolSize = 10;  

  5.         AioSocketServer server = new AioSocketServer(listenPort, poolSize);  

  6.         server.start();  

  7.     }  

  8. }  


然后客戶端的代碼類似這樣: 
EasyClient.java 

Java代碼  

  1. public class EasyClient {  

  2.     private static TransferObjectFactory transferObjectFactory;  

  3.     private static TestManager manager;  

  4.       

  5.     public static void main(String[] args) {  

  6.         transferObjectFactory = new TransferObjectFactory("test1"true);  

  7.         transferObjectFactory.setImplClass("TestManagerImpl");  

  8.         manager = (TestManager)ClientProxyFactory.create(TestManager.class, transferObjectFactory);  

  9.           

  10.         int Id = 18;  

  11.         String name = "JimT";  

  12.         String result = manager.sayHello(Id, name);  

  13.         System.out.println("result: "+result);  

  14.     }  

  15. }  


當然我們需要把接口類(TestManager.class) 加入到客戶端的classpath里。客戶端還需要一個配置文件controller.xml列出要被客戶端調用的服務器端程序的IP, port和連接名。 (注意連接名“test1”) 
controller.xml 

Xml代碼  

  1. <connections>  

  2.   <connection>  

  3.     <hostIp>127.0.0.1hostIp>  

  4.     <hostPort>10001hostPort>  

  5.     <timeout>5000timeout>  

  6.     <retryTime>3retryTime>  

  7.     <name>test1name>  

  8.   connection>  

  9. 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

項目主頁:http://www.baiduhome.net/lib/view/home/1396920767153

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!