在寫網絡服務器的邏輯時,常常避免不了需要向 另一個服務器 發送協議, 直到等待返回成功, 再繼續下一步的操作
這時候, 代碼可能是這樣的
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 19:46 by S.l.e!ep.¢%樓上的,我看了,系統API都有現成的,灰常不錯,我喜歡.
# re: 突發奇想 之 遠程調用 回復 更多評論
2013-05-20 00:13 by Richard Weirpc
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|