簡體   English   中英

客戶端套接字和服務器套接字之間支持多種類型操作的最佳通信方式是什么?

[英]What is the best way to communicate between client socket and server socket which suppors multiple types of action?

簡而言之:

主要問題是,對於在線游戲,服務器應支持客戶端希望執行的多種類型的操作 ,例如:“登錄游戲”。 ,“創建游戲室”。 ,“啟動游戲”,“發送聊天消息”,“獲取會議室列表”。 ...

但是,如果我要使用Socket ,我想知道從服務器和客戶端之間接收或發送的每條消息中區分操作類型的最佳方法是什么。

這是我的在線游戲部署的樣子:

建築

對於支持多種類型的動作,我的第一個想法是:

通訊

如果我選擇使用JSON,它可能看起來像:

{
    "action":"signIn",
    "data":{
        "id":"00001",
        "name":"waterball"
    }
}

然后服務器端可以通過解析JSON屬性來區分操作。

但是出現問題,我將有很多“ if-else”描述,例如:

if ( action.equals("signIn") )
    ....
else if ( action.equals("createRoom") )
    ....
else if ( action.equals("launchGame") )
    ....

並且該程序可能是非常不可擴展和不可維護的。

因此,請分享您的想法,哪種更好的方法可以在服務器/客戶端套接字之間支持多種類型的操作。

謝謝。

但是出現問題,我將有很多“ if-else”描述,例如:

您可以使用可以接受JSON對象的process()方法定義一個Processing接口(例如: javax.json.JsonObject )。
每個動作都實現此接口。
這樣,您可以使用Map<String, Action>來存儲與每個String動作關聯的Action子類。

例如,初始化地圖:

Map<String, Action> actionsByName = new HashMap<>();
actionsByName.put("signIn", new SignAction());
actionsByName.put("createRoom", new CreateRoomAction());

要處理用戶操作:

   String actionName = ..;
   Action action = actionsByName.get(actionName);
   action.process(jsonObject);

我相信使用JSON作為消息傳遞是很好的,但是,在處理多種類型的動作時,您可能會對使用命令設計模式感興趣。

https://www.tutorialspoint.com/design_pattern/command_pattern.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM