<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          TatalaRPC中間件

          聯(lián)合創(chuàng)作 · 2023-10-01 12:28

          這個(gè)項(xiàng)目最早(2008年)是用于一個(gè)網(wǎng)絡(luò)游戲的Cache Server,以及一個(gè)電子商務(wù)的Web Session服務(wù)。后來(lái)不斷增加新的功能,除了Java還支持C#,到現(xiàn)在已經(jīng)可以用它來(lái)開發(fā)網(wǎng)絡(luò)游戲的服務(wù)器。等過(guò)些日子我還會(huì)開源網(wǎng)絡(luò)游戲的服務(wù)器源碼。 

          關(guān)于性能,當(dāng)時(shí)后臺(tái)相應(yīng)請(qǐng)求的效率是每秒10W次,現(xiàn)在我在自己的筆記本上測(cè),只有一個(gè)客戶端與服務(wù)器都在一個(gè)物理機(jī)上(CPU: i7-3610QM; RAM: 8G; OS: Win7-64),每秒相應(yīng)12000個(gè)請(qǐng)求。 

          tatala-client-csharp已經(jīng)上傳,同樣在筆記本上測(cè)試,一個(gè)c#客戶端一個(gè)Java服務(wù)端都在一臺(tái)機(jī)器上,每秒響應(yīng)22000個(gè)請(qǐng)求。c#客戶端除了性能測(cè)試的例子還有一個(gè)演示Server推送的聊天室例子。

          Tatala最大的特點(diǎn)是簡(jiǎn)單,性能是第二考慮能夠滿足大部分應(yīng)用就行。因?yàn)樾阅芸梢酝ㄟ^(guò)增加機(jī)器得到提升,而代碼簡(jiǎn)單意味著雇更少的人更快的開發(fā)。老板省錢,程序員輕松才是最重要的。 

          下面是簡(jiǎn)單介紹。 

          概述 
          Tatala是一個(gè)簡(jiǎn)單易用的RPC中間件,并且跨語(yǔ)言跨平臺(tái)。它將調(diào)用方法轉(zhuǎn)變成字節(jié)數(shù)組(包括被調(diào)用類名,目標(biāo)方法名,參數(shù)序列和返回值),在socket基礎(chǔ)上實(shí)現(xiàn)客戶端和服務(wù)器之間的互相通信。 

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

          特性 
          * 簡(jiǎn)單易用可以快速開發(fā)和建立網(wǎng)絡(luò)組件
          * 跨語(yǔ)言跨平臺(tái)
          * 高性能和分布式
          * 傳輸協(xié)議為短小精悍的二進(jìn)制
          * 支持socket長(zhǎng)連接
          * 客戶端與服務(wù)器端多線程處理
          * 支持異步請(qǐng)求
          * 對(duì)于大數(shù)據(jù)支持壓縮傳輸
          * 支持服務(wù)器端主動(dòng)推送消息
          * 客戶端程序可以捕獲服務(wù)端拋出的異常,使客戶端支持事務(wù)回滾
          * 支持Google Protocol Buffers作為對(duì)象序列化進(jìn)行網(wǎng)絡(luò)傳輸
          * 支持在服務(wù)端注冊(cè)多個(gè)filter,在調(diào)用業(yè)務(wù)代碼之前預(yù)處理傳入的數(shù)據(jù),注入業(yè)務(wù)邏輯,如權(quán)限檢查等
          * 能夠用于跨語(yǔ)言的遠(yuǎn)程方法調(diào)用RPC,高性能的緩存服務(wù)器,分布式的消息服務(wù),多人在線游戲服務(wù)器,等等

          快速開始 

          下載tatala.jar 包含在你項(xiàng)目的classpath中。

          簡(jiǎn)單編程是Tatala第一考慮因素,所以用它建立RPC的方式,讓開發(fā)者感覺就像調(diào)用本地普通方法一樣簡(jiǎn)單。不用考慮網(wǎng)絡(luò),線程這些東西。

          現(xiàn)在舉一個(gè)例子,假如我們有個(gè)服務(wù)器端的服務(wù)ExampleManager接口 和 ExampleManagerImpl實(shí)現(xiàn)類。

          ExampleManager.java

          public interface ExampleManager{
              public String sayHello(int Id, String name);
          } 

          ExampleManagerImpl.java

          public class ExampleManagerImpl implements ExampleManager{
           public String sayHello(int Id, String name) {
               return "["+Id+"]"+"Hello "+name+" !";
           }
          } 


          我們還需要在服務(wù)端建立一個(gè)socket服務(wù)類來(lái)部署我們的業(yè)務(wù)邏輯,在這個(gè)例子中socket服務(wù)監(jiān)聽端口是10001。 ExampleServer.java

          public class ExampleServer {
           public static void main(String args[]) {
               int listenPort = 10001;
               int poolSize = 10;
               AioSocketServer server = new AioSocketServer(listenPort, poolSize);
               erver.start();
           }
          } 

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

          EasyClient.java

          public class EasyClient {
              private static TransferObjectFactory transferObjectFactory;
              private static ExampleManager manager;
          
          
              public static void main(String[] args) {
                  transferObjectFactory = new TransferObjectFactory("127.0.0.1", 10001, 5000);
                  transferObjectFactory.setImplClass("ExampleManagerImpl");
                  manager = (ExampleManager)ClientProxyFactory.create(ExampleManager.class, transferObjectFactory);
          
          
                  String result = manager.sayHello(18, "JimT");
                  System.out.println("result: "+result);
              }
          } 

          創(chuàng)建一個(gè)TransferObjectFactory對(duì)象,設(shè)置server端的IP地址,端口號(hào)和超時(shí)時(shí)間。設(shè)置被調(diào)用的實(shí)現(xiàn)類的類名,建立proxy,調(diào)用方法。當(dāng)然我們需要把接口類(ExampleManager.class) 加入到客戶端的classpath里。這就是建立一個(gè)Tatala RPC的所有代碼,不需要任何配置文件,是不是很簡(jiǎn)單?

          更多例子請(qǐng)看教程。 
          Tatala-中文教程 

          傳輸協(xié)議 
          在客戶端把調(diào)用的方法信息設(shè)置到transfer object里, Tatala把transfer object轉(zhuǎn)換成字節(jié)數(shù)組并且發(fā)送給服務(wù)器。在服務(wù)器端把接收到的字節(jié)數(shù)組再還原成包含調(diào)用信息的transfer object。包括被調(diào)用類名,目標(biāo)方法名,參數(shù)信息和返回類型等。Tatala 執(zhí)行器獲得調(diào)用信息執(zhí)行目標(biāo)方法。 

          支持類型 
          Tatala支持的參數(shù)和返回類型: 
          bool,byte,short,chat,int,long,float,double,Date,String, 
          byte[],int[],long[],float[],double[],String[],Serializable,Protobuf, WrapperClass 

          其它描述 
          需要JDK1.7,因?yàn)槭褂昧薐ava AIO。 

          第三方類庫(kù)包括Protobuf,Log4j。 

          License 
          Apache License Version 2.0

          瀏覽 18
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99精品全国免费观看 | 轻轻操免费视频 | 欧美日韩亚洲一区二区三区 | 射射射综合网 | 国产三级电影在线 |