我一直在問一些關於如何在我的客戶端服務器環境中使用命令協議的問題。然而,經過一番實驗,我得出的結論是它不適合我。它不是爲這種情況設計的。因此我處於一個鬆散的結局。Java Socket RPC協議
我已經實現了一種RPC機制,在此之前我有一個名爲「Operation」的類。我還有一個名爲「Action」的枚舉,其中包含可以在服務器上調用的操作的名稱。
現在,在我的舊項目中,客戶端每次想要在服務器上調用一個操作時,它都會創建一個「Operation」實例,並使用「Action」枚舉中的值設置操作變量。例如
Operation serverOpToInvoke = new Operation();
serverOpToInvoke.setAction(Action.CREATE_TIME_TABLE);
serverOpToInvoke.setParameters(Map params);
ServerReply reply = NetworkManager.sendOperation(serverOpToInvoke);
...
在服務器端,我不得不執行確定通過用「的if/else」語句的負荷檢查「操作」枚舉值來調用該方法的可怕任務。當找到一場比賽時,我會調用適當的方法。
與此問題是,它是凌亂的,很難維護,最終是不好的設計。
我的問題是這樣的 - 是否有某種模式,我可以按照java中的TCP套接字實現一個漂亮,清潔和可維護的rpc機制?由於客戶端(android)不支持RMI,因此RMI對我來說是不可行的。在這個階段我已經耗盡了所有的途徑。唯一的其他選擇可能是REST服務。任何建議都會非常有幫助。
非常感謝您 問候
嗨biziclop,當你提到使用反射執行命令的服務器,你能詳細解釋一下嗎?你昨天回答了一個關於我的命令模式的帖子,從那以後,我讀到了強大的動態代理。我很感謝代碼。我對整體概念更感興趣。非常感謝您的幫助 – Joeblackdev 2011-02-17 19:45:31
@Joeblackdev更新了我的答案,希望它有所幫助。 – biziclop 2011-02-17 20:05:19