• <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.¢%

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

            突發(fā)奇想 之 遠(yuǎn)程調(diào)用

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

            在寫網(wǎng)絡(luò)服務(wù)器的邏輯時(shí),常常避免不了需要向 另一個(gè)服務(wù)器 發(fā)送協(xié)議, 直到等待返回成功, 再繼續(xù)下一步的操作
            這時(shí)候, 代碼可能是這樣的

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

            注:
            PROTOCOL_A 是協(xié)議號
            param 是參數(shù)
            callBackFun 是回調(diào)函數(shù)

            甚至有時(shí)還需要寫? onError / onTimeout 之類的回調(diào)
            這樣,?? 一個(gè)業(yè)務(wù)邏輯被"分割"在兩個(gè)甚至多個(gè)函數(shù)內(nèi)去寫

            再假設(shè),??

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

            這樣的話,?
            在寫業(yè)務(wù)邏輯時(shí),? 思路常常被中斷,? :) 有時(shí)寫完一個(gè)回調(diào)函數(shù), 前面考慮的異常已經(jīng)忘記了?
            在看業(yè)務(wù)邏輯時(shí),? 思緒在不同的函數(shù)間 跳來跳去,? 容易看錯(cuò)或看漏東西.

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

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

            call 函數(shù)內(nèi)部其實(shí)是一個(gè)遠(yuǎn)程調(diào)用, 發(fā)協(xié)議到其它服務(wù)器, 等其返回協(xié)議后, 直接在 Response 就可以取 對方返回的協(xié)議內(nèi)容, 當(dāng)然 timeout
            Response 也應(yīng)該返回錯(cuò)誤碼

            再簡單一點(diǎn)說, 就是寫 遠(yuǎn)程調(diào)用不需要 callback, 不需要實(shí)現(xiàn)? onError / onTimeout 之類的東西
            寫法就跟調(diào)用一個(gè)函數(shù)一樣方便

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

            現(xiàn)階段, 似乎對 "遠(yuǎn)程調(diào)用 同步的寫法" 并沒有很好的解決方案,
            網(wǎng)上看了些遠(yuǎn)程調(diào)用框架, 也避免不了要寫 callback

            需要實(shí)現(xiàn)也可以, 但并不是優(yōu)雅的實(shí)現(xiàn)方案

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

            無論哪種實(shí)現(xiàn), 都要注意, 在調(diào)用? callback 時(shí), 要緩存當(dāng)前所有的臨時(shí)變量, 在對方服務(wù)器返回協(xié)議后, 再恢復(fù)這些臨時(shí)變量, 這樣才可以真正做到
            "遠(yuǎn)程調(diào)用 同步的寫法"

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

            說了大半天, 還是沒有解決方案, 只是一時(shí)突發(fā)的一個(gè)想法, 記錄之
            ?

            Feedback

            # re: 突發(fā)奇想 之 遠(yuǎn)程調(diào)用  回復(fù)  更多評論   

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

            # re: 突發(fā)奇想 之 遠(yuǎn)程調(diào)用  回復(fù)  更多評論   

            2013-05-19 12:47 by 會飛的導(dǎo)彈豬
            樓主可以試試協(xié)程

            # re: 突發(fā)奇想 之 遠(yuǎn)程調(diào)用  回復(fù)  更多評論   

            2013-05-19 19:46 by S.l.e!ep.¢%
            樓上的,我看了,系統(tǒng)API都有現(xiàn)成的,灰常不錯(cuò),我喜歡.

            # re: 突發(fā)奇想 之 遠(yuǎn)程調(diào)用  回復(fù)  更多評論   

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

            # re: 突發(fā)奇想 之 遠(yuǎn)程調(diào)用  回復(fù)  更多評論   

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

            # re: 突發(fā)奇想 之 遠(yuǎn)程調(diào)用  回復(fù)  更多評論   

            2013-05-20 12:12 by 三斷笛
            wcf
            亚洲∧v久久久无码精品| 久久久久亚洲av无码专区导航| 久久99国产乱子伦精品免费| 国内精品久久国产| 久久久久九国产精品| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 精品国产福利久久久| 亚洲精品美女久久777777| 久久久久久国产a免费观看黄色大片| 久久99久久无码毛片一区二区| 亚洲乱亚洲乱淫久久| 99久久国产综合精品网成人影院 | 久久香蕉超碰97国产精品| 综合人妻久久一区二区精品| 久久久久亚洲AV无码观看| 无码国内精品久久综合88| 精品久久人人爽天天玩人人妻| 久久久久久精品免费看SSS| 欧美一区二区久久精品| 亚洲精品无码久久久久久| 久久99精品久久久久久hb无码| AAA级久久久精品无码片| 久久综合狠狠色综合伊人| 久久香蕉国产线看观看99| 久久99精品九九九久久婷婷| 欧美精品福利视频一区二区三区久久久精品 | 久久久久人妻精品一区| 狠狠干狠狠久久| 久久精品成人免费国产片小草| 天天影视色香欲综合久久| 久久精品国产亚洲AV香蕉| 久久精品国产亚洲av水果派| 久久免费线看线看| 久久久青草青青国产亚洲免观| 人妻无码αv中文字幕久久琪琪布| 人妻无码中文久久久久专区| 久久精品国产亚洲欧美| 手机看片久久高清国产日韩| 久久久久久亚洲精品成人| 久久国产热这里只有精品| 亚洲精品乱码久久久久久按摩|