• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            socketref,再見!高德

            https://github.com/adoggie

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            TCE
            項目全稱Tiny Communication Engine,意味著小型的通信引擎




            RPC技術:
                RPC是指遠程過程調用(Remote Procedure Call),這種技術被定義出來應該有成長的歷史時間。
                RPC技術意在消除網絡通信的細節,讓開發者只需關心具體的業務而不必考慮由于網絡、硬件、系統的異構復雜環境。相關的RPC有DCOM,java的RMI,CORBA,VISIBROKER,ICE(zeroc.com)等等。
                xmlRPC是基于xml數據格式的RPC封裝,相關的使用項目也不老少,但這東東由于是xml格式,數據流量太大,不建議使用。

            使用RPC的原因:
                 傳統端到端的通信方式一般都是基于流的數據傳遞,應用消息在發送端編碼并傳送到接收端解碼。 這是一個重復造輪子的過程,不同的應用協議由于規格不同,消息到流的序列化和反序列化過程不可避免。這個過程是個容易出錯的過程,應用協議的改動則必須再次修改編解碼代碼,這不該是提倡的,且顯得異常無奈和低端。
                流式的數據在接收之后必須進行應用類型的消息分揀,以便分派消息到不同的處理函數,這個過程同樣也會被重復的編寫。
                


            TCE是RPC的實現:
                因為是輕量級的,所以很容易被修改、擴展或者被重新定義。 
                目前已經支持多種開發語言和通信方式。

            TCE的功能特點: 
                 1.多通信協議:   rpc的消息可以在多種協議上被交換,協議包括:socket,websocket,MQ,http。 socket應用于最常見的端端通信,c,s兩端直接socket完成通信; websocket支持html5的javascript與服務器的通信; MQ 指集群系統之間消息隊列作為數據傳遞總線時,Rpc消息作為MQ的消息包被傳遞交換。

                 2.基于接口級別的調用:  這種模式完全不同與流消息傳遞,用戶無需關心消息如何被序列化和反序列化,并且無需參與消息類型到處理業務函數的分揀,這一切都是自動的,A只需調用B的一個函數接口即可

                 3.多語言支持: TCE目前實現的語言有c++,java,javascript,as3,python 支持在這些語言之間互相接口調用。

                 4.一致的通信服務:   
                       tce內置高性能的通信服務器,c++版本采用boost::asio,python版本采用gevent作為通信引擎

                 5. 多種調用模式:
                        normal-call (twoway) - client調用server接口,此刻線程被阻塞,直到server處理返回
                           oneway-call - client調用server接口之后即刻返回,這種適用于揮發性的調用請求類型,例如:心跳包  
                           timeout-call - client調用server接口,此刻線程被阻塞,直到server處理返回,如果超時,線程會被解除阻塞
                           async-call - client調用server接口之后即刻返回,server處理返回之后將回調client的異步處理函數
                           reversed-call - NAT網絡模式下,client發起RPC調用時將建立與server的socket連接,并請求server端RPC接口;反向調用指server端憑借此連接調用client端的RPC接口

            接口定義語言(IDL):
                不同的Rpc的實現都有自己的定義規格,TCE的規格類似與ICE。
                文件命名:<interface>.idl 
                1. 數據類型: 
                  --name       size    c++                java             python             as3           javascript 
                    byte              1      int8                 byte             int                  byte
                    short             2      int16               short            int
                    int                 4      int32               int                int
                    float              4      float                float              float
                    long              8       int64              long              int
                    double           8      double             long              float
                    string            -       std::string       String           str
                    bool              1       bool                boolean         True/False
                    sequence                std::vector      Vector           []                 Array               Array
                    dictionary                std::map         HashMap       {}                HashMap          Hash
                    struct                     struct             class               class           class               function

                1. module:  系統模塊定義,同一個接口文件中可以包含多個module定義
                      module first{ ... }
                      module second{ ... }

                 2. struct :  數據結構定義
                           struct Student{
                               int no;
                               string name;
                               int grade;
                            };
                   
                 3. sequence: 數組 
                     sequence<int> IdList;
                     sequence<string> StrList;

                  4. dictionary: 哈希結構
                     dictionary<string,Student>   StudentList;

                  5. interface :  接口定義
                      interface GisServer{
                            string Authorize(string user,string passwd);
                            GpsData  getGpsData(string device_id);
                      };

                         
            posted on 2013-09-15 22:25 放屁阿狗 閱讀(2305) 評論(0)  編輯 收藏 引用
            久久国产精品免费| 欧美精品久久久久久久自慰| 人人狠狠综合久久亚洲婷婷| 国产精品欧美久久久天天影视| 99精品国产在热久久| 91精品免费久久久久久久久| 香港aa三级久久三级老师2021国产三级精品三级在| 精品久久久久久国产免费了| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久久亚洲爆乳少妇无| 亚洲国产小视频精品久久久三级| 久久天天躁狠狠躁夜夜躁2014| 亚洲精品无码久久一线| 久久精品国产亚洲网站| 亚洲午夜精品久久久久久浪潮| 日韩人妻无码精品久久免费一 | 热99re久久国超精品首页| 久久99精品久久久久久齐齐| 久久久久久久久久久久中文字幕 | 色婷婷综合久久久久中文字幕 | 91久久精品无码一区二区毛片| 久久亚洲精品成人无码网站 | 乱亲女H秽乱长久久久| 精品久久久久久国产三级| 国产Av激情久久无码天堂| 久久香综合精品久久伊人| 久久精品无码av| 99久久99久久精品国产片果冻| 少妇高潮惨叫久久久久久| 国产精品99久久久久久宅男小说| 大蕉久久伊人中文字幕| 粉嫩小泬无遮挡久久久久久| 亚洲色欲久久久综合网| 国内精品九九久久精品| 久久午夜免费视频| 久久久精品人妻无码专区不卡| 久久精品成人免费网站| 色婷婷综合久久久久中文| 亚洲精品乱码久久久久久久久久久久 | 成人久久精品一区二区三区| 久久精品国产亚洲av日韩|