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

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            突發奇想 之 遠程調用

            Posted on 2013-05-19 11:04 S.l.e!ep.¢% 閱讀(2425) 評論(6)  編輯 收藏 引用 所屬分類: Other

            在寫網絡服務器的邏輯時,常常避免不了需要向 另一個服務器 發送協議, 直到等待返回成功, 再繼續下一步的操作
            這時候, 代碼可能是這樣的

            RemoteObj.call( PROTOCOL_A,??param, callBackFun?);

            注:
            PROTOCOL_A 是協議號
            param 是參數
            callBackFun 是回調函數

            甚至有時還需要寫? onError / onTimeout 之類的回調
            這樣,?? 一個業務邏輯被"分割"在兩個甚至多個函數內去寫

            再假設,??

            向 服務器A? 請求,? 需要等待 服務器A 返回成功后,? 取到數據, 再向 服務器B 請求, 需要等待 服務器B 返回成功后, ...... (后面省略10000字)

            這樣的話,?
            在寫業務邏輯時,? 思路常常被中斷,? :) 有時寫完一個回調函數, 前面考慮的異常已經忘記了?
            在看業務邏輯時,? 思緒在不同的函數間 跳來跳去,? 容易看錯或看漏東西.

            我還假設,?? 如果代碼只需要這樣寫

            Response?resp = RemoteObj.call( PROTOCOL_A,??param);
            if ( resp.RetCode == SUCCESS?)
            ......

            call 函數內部其實是一個遠程調用, 發協議到其它服務器, 等其返回協議后, 直接在 Response 就可以取 對方返回的協議內容, 當然 timeout
            Response 也應該返回錯誤碼

            再簡單一點說, 就是寫 遠程調用不需要 callback, 不需要實現? onError / onTimeout 之類的東西
            寫法就跟調用一個函數一樣方便

            ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

            現階段, 似乎對 "遠程調用 同步的寫法" 并沒有很好的解決方案,
            網上看了些遠程調用框架, 也避免不了要寫 callback

            需要實現也可以, 但并不是優雅的實現方案

            例如:
            可以在 call() 里面等待一個信號, 另一個線程等待接受協議返回后, 再激活這個信號, 但總不能一個 call() 調用就阻塞一條線程吧?
            還可以 用 throw expcetion / long jump / goto 來實現調用 call() 發完協議后先 return , 等協議返回后, 再繼續 goto到? call() 之后的代碼, 這是最不優雅的做法了
            再可以 用 一堆宏把 callback / ontimeout / onerror 之類的函數"屏蔽"掉, 也不是優雅的做法, 用宏實現, 有時一個簡單的語法錯, 可能都要找半天
            甚至可以 弄自己的一套語法解析,? 自己寫一個語法解析的工具,? 寫完代碼后, 再運行去 解析代碼里的所有? callback , 再換成? callback / ontimeout / onerror 的函數

            無論哪種實現, 都要注意, 在調用? callback 時, 要緩存當前所有的臨時變量, 在對方服務器返回協議后, 再恢復這些臨時變量, 這樣才可以真正做到
            "遠程調用 同步的寫法"

            ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

            說了大半天, 還是沒有解決方案, 只是一時突發的一個想法, 記錄之
            ?

            Feedback

            # re: 突發奇想 之 遠程調用  回復  更多評論   

            2013-05-19 12:32 by Lo
            Lambda 表達式 可以緩解 用起來感覺不錯的

            # re: 突發奇想 之 遠程調用  回復  更多評論   

            2013-05-19 12:47 by 會飛的導彈豬
            樓主可以試試協程

            # re: 突發奇想 之 遠程調用  回復  更多評論   

            2013-05-19 19:46 by S.l.e!ep.¢%
            樓上的,我看了,系統API都有現成的,灰常不錯,我喜歡.

            # re: 突發奇想 之 遠程調用  回復  更多評論   

            2013-05-19 20:49 by 漂漂
            函數式編程,參考一下jquery的數據請求。

            # re: 突發奇想 之 遠程調用  回復  更多評論   

            2013-05-20 00:13 by Richard Wei
            rpc

            # re: 突發奇想 之 遠程調用  回復  更多評論   

            2013-05-20 12:12 by 三斷笛
            wcf
            久久有码中文字幕| 三级三级久久三级久久| 精品久久777| 久久国产精品免费| 国产成人无码精品久久久性色| 一本久久a久久精品亚洲| 2021国产成人精品久久| 亚洲第一极品精品无码久久| 一级做a爱片久久毛片| 久久夜色精品国产亚洲| 99精品国产在热久久无毒不卡| 免费一级欧美大片久久网| 久久精品人人槡人妻人人玩AV| 欧美久久一级内射wwwwww.| 久久精品国产亚洲av麻豆色欲 | 狠狠久久综合伊人不卡| 亚洲国产小视频精品久久久三级 | 久久天天婷婷五月俺也去 | 久久久久国产日韩精品网站| 日日躁夜夜躁狠狠久久AV| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 中文精品久久久久人妻不卡| 久久精品亚洲精品国产欧美| 97r久久精品国产99国产精| 精品综合久久久久久97| 亚洲国产成人久久综合一区77| 国产成人精品久久亚洲高清不卡 | 精品久久一区二区| 久久91精品国产91久久户| 97久久国产露脸精品国产| 国产精品乱码久久久久久软件| 欧美久久久久久精选9999| 国产 亚洲 欧美 另类 久久 | AV无码久久久久不卡网站下载| 亚洲综合伊人久久综合| 热99RE久久精品这里都是精品免费| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久久精品国产Sm最大网站| 久久国产精品免费一区| 99久久精品久久久久久清纯|