简而言之:
主要问题是,对于在线游戏来说,服务器应该支持客户端想要执行的多种类型的操作,例如:“登录游戏”。 ,“创建一个游戏室。” 、“启动游戏。”、“发送聊天消息。”、“获取房间列表。” ...
但是如果我要使用Socket,我想知道从服务器和客户端之间接收或发送的每条消息中区分操作类型的最佳方法是什么。
这就是我的在线游戏的部署:
为了支持多种类型的操作,我的第一个想法:
如果我选择使用 JSON,它可能看起来像:
{
"action":"signIn",
"data":{
"id":"00001",
"name":"waterball"
}
}
然后Server端可以通过解析JSON属性来区分出 Action 。
但是问题出现了,我会有很多“if-else”描述,例如:
if ( action.equals("signIn") )
....
else if ( action.equals("createRoom") )
....
else if ( action.equals("launchGame") )
....
而且该程序可能非常不可扩展且难以维护。
因此,请分享您关于支持服务器/客户端套接字之间多种类型操作的更好方法的想法。
谢谢。
最佳答案
But a problem occurs, I will have lots of "if-else" descriptions like:
您可以定义Processing
与 process()
的接口(interface)接受 JSON 对象的方法(例如: javax.json.JsonObject
)。
每个 Action 都实现这个接口(interface)。
这样你就可以使用 Map<String, Action>
它存储与每个字符串操作关联的操作子类。
例如初始化 map :
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);
关于java - 支持多种类型操作的客户端套接字和服务器套接字之间通信的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44911653/