分享一個簡單易用的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推送的聊天室例子。 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 
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.1</hostIp>  
  4.     <hostPort>10001</hostPort>  
  5.     <timeout>5000</timeout>  
  6.     <retryTime>3</retryTime>  
  7.     <name>test1</name>  
  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
相關文章
相關標籤/搜索