【发布时间】:2019-08-17 22:52:45
【问题描述】:
我有一个游戏服务器,它将在几个实例上运行。
世界 1、世界 2、世界 3
每个世界都是在不同 IP 地址上运行的服务器。
有一个游戏应该有的列表:
- 连接到游戏,对用户进行身份验证。
- 能够查看所有连接的玩家,显示每个玩家连接的世界。
- 能够向玩家发送消息,即使他连接到不同的世界服务器。
- 能够向所有服务器发送全局消息。
我能想到的有两种方法:
方法 1 - 登录服务器 TCP/IP
创建中间人服务器。当客户端连接到一个世界时,该世界服务器将发送一个登录请求数据包以获取输入的用户凭据,登录服务器将检查数据库并以身份验证结果进行响应,如果成功,用户将被授权在世界。
登录服务器将始终使用在线玩家列表更新所有世界,以及每个玩家的状态、他所在的世界等。
- 当玩家 X 在不同世界向玩家 Y 发送消息时,世界服务器会向登录服务器发送消息,登录服务器会将消息传递给该玩家的目标世界,以便另一个玩家世界将收到消息。
方法 2
与方法 1 的工作方式相同,但不是登录服务器,而是使用 HTTP API 服务器,并使用 Redis 服务器通过事件相互更新。 为什么我认为这更好?因为将网络应用程序集成到游戏中会更容易,所以允许用户通过网络应用程序相互连接和聊天。
为了在方法 1 中执行此操作,您需要向 TCP/IP 登录服务器添加一个新隧道以支持 WebSocket 连接。
很抱歉画的不好。
方法 2 可能吗?你认为什么是更好的方法,如果你能想到其他方法?
【问题讨论】:
标签: java http server redis architecture