• <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)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            idl的保留關鍵字:'byte','bool','short','int','long','float','double','string' ,均不能用于定義module,class,interface和變量名稱
            定義的變量名稱如果包含以下單詞:'def','import','from','type','str','int','float','class' , tce生成python代碼時自動給添加'_'后綴,比如: 
             struct xx{
               string name;
               string from; 
            }
            xx結構的from變量名將生成from_
            接口定義:
            module test{
                 dictionary<string,string> Properties_t;
                 sequence<string> IpAddressList_t;
                 
                 interface ITerminal{
                      void onGetServerMessage(string text);
                 }
                 interface Server{
                      IpAddressList_t getIpAddresses();  
                      Properties_t  getProperties();
                      void ping(string fromhost);
                      string login(string user,string passwd,ctx);
                 };
            }
            struct: 
            tce將結構struct映射為class對象 ,初始化成員變量并創建散列函數 marshall/unmarshall
            sequence<T>: 
            tce將數組類型直接映射為[]
            例如 :  
            dictionary<K,V> 
            tce將字典映射為 {}
            python實現Server接口的getIpAddresses()方法: 
              def  getIpAddresses():
                   return ['192.168.14.101','192.168.12.50']
            定義服務器接口實現: 
            tce為interface生成接口基類: class Server
            我們提供一個實現類 : 
            class ServerImpl(Server):
                def __init__(self):
                     Server.__init__(self)
               def getIpAddresses(self,ctx):
                    return []
            在這里我們提供了ServerImpl類,然后編寫實現函數getIpAddresses. 每個接口函數都攜帶ctx參數,ctx攜帶rpc請求的附屬信息,比如: 外帶數據(dict),底部的連接對象 等等 。 
            服務接口被稱為一個服務類servant ,接下來演示如何將這個servant裝配并提供客戶。 
            tce.RpcCommunicator.instance().init()
            ep = tce.RpcEndPoint(host='127.0.0.1',port=16005)                                   定義一個通信端點
            adapter = tce.RpcCommunicator.instance().createAdapter('first_server',ep) 創建一個通信適配器
            servant = ServerImpl()          創建服務接口對象
            adapter.addServant(servant)  添加進適配器
            tce.RpcCommunicator.instance().waitForShutdown()   進入通信循環 
            調用服務: 
            tce.RpcCommunicator.instance().init()
            prx = test.ServerProxy.create(127.0.0.1,16005)
            ips = prx.getIpAddresses()
            多種呼叫模式: 
            tce將接口函數自動生成 normal,oneway,async三種調用接口方法 ,rpc調用出現異常,底部將拋出異常,所以用戶需要異常捕獲。
            1.normal: 
                原型:     fun_name(參數..,timeout=0,extra=None)
                      調用函數自動添加timeout,extra參數。timeout默認為0,將自動采用tce默認的30s等待調用返回時間;
                      extra 指此次調用攜帶的附屬數據,extra ={'name':'scott','age':100}
                      extra數據在服務端接口函數的ctx中獲取: ctx.msg.extra 
                      函數調用時將阻塞客戶線程,直到timeout超時或者服務器數據返回
            2. oneway
                fun_name_oneway(參數...,extra=None)
                 只有類型void的接口函數才會生成oneway調用方法.oneway調用不會阻塞用戶線程,通常用于單向傳輸的場景,例如 Server接口的ping()函數
            3. async 
                 fun_name_async(參數,async_callback,extra=None)
                 異步調用模式不會阻塞客戶線程,async_callback指定了rpc調用的返回接收函數
                 接收函數原型:  void fun_name_CallBack(result,proxy)
                  例如: 
                      def getIpAddressesResult(result,proxy):
                           print result   #result - IpAddressList_t
                      prx.getIpAddresses_async(getIpAddressesResult)
            *連接復用
              在互聯網應用場景,服務器將接入大量的客戶端設備,客戶端是不能被尋址,所以服務器要完成推送消息給客戶端,必須在客戶端建立的連接上反向傳輸。 
              tce使這個工作變得相當簡單:
                1. 客戶端定義接收消息的接口 ITerminal,定義接收函數onGetServerMessage()
                      class TermnialImpl(ITerminal):
                           ...
                 2. 創建到服務器的連接代理
                      tce.RpcCommunicator.instance().init()
                      prx = test.ServerProxy.create(127.0.0.1,16005)  創建但并不馬上連接
                 3. 添加服務類實現
                      adapter = tce.RpcCommAdapter('adapter')
                      impl = TerminalImpl()
                      adapter.addConnection(prx.conn)
                      adapter.addServant(impl)     加到通信器對象
                 3.  請求一次調用
                      prx.login('scott','1234')
                 4.   服務器端反向調用ITerminal的onGetServerMessage()
                      def login(self,user,passwd,ctx):
                           prx = ITerminalProxy(ctx.conn)
                           prx.onGetServerMessage('server message..')     完成一次對設備端的接口調用
            posted on 2013-10-02 03:18 放屁阿狗 閱讀(331) 評論(0)  編輯 收藏 引用 所屬分類: TCE
            漂亮人妻被黑人久久精品| 国产精品久久久久久久app | 精品久久久中文字幕人妻| 欧美久久久久久精选9999| 久久久无码精品亚洲日韩蜜臀浪潮| 中文精品久久久久人妻不卡| 99国产精品久久| 亚洲欧美成人久久综合中文网 | 无码精品久久久久久人妻中字| 亚洲AV日韩精品久久久久久久| 国产精品久久午夜夜伦鲁鲁| 欧美色综合久久久久久| 97久久超碰国产精品旧版 | 日韩久久久久久中文人妻| 久久精品国产69国产精品亚洲| 久久人人爽人人人人片av| 亚洲国产精品婷婷久久| 亚洲欧洲日产国码无码久久99| 久久久久亚洲精品天堂久久久久久| 久久丫精品国产亚洲av| 一本大道久久香蕉成人网| 国产精品免费久久久久久久久| 亚洲精品国产美女久久久| 一本色道久久综合狠狠躁篇| 久久久国产精品网站| 久久水蜜桃亚洲av无码精品麻豆| 久久99热这里只有精品66| 日韩一区二区三区视频久久| 国产精品欧美亚洲韩国日本久久| 久久久久久久久无码精品亚洲日韩 | 久久综合综合久久综合| 久久人人爽人人人人爽AV| 四虎影视久久久免费观看| 国产午夜精品久久久久九九电影 | 精品久久久久久国产三级| 成人a毛片久久免费播放| 天天久久狠狠色综合| 久久精品免费观看| 97超级碰碰碰碰久久久久| 狠狠人妻久久久久久综合蜜桃| 国产精品日韩欧美久久综合|