我正在开发一个基于Java的多人回合制战略游戏(包括客户端和服务器)。我在网络游戏方面没有太多经验,但我做过一些小事情,比如一个多客户聊天和2个玩家tic tac toe with socket。我不是在寻找有人为我编码,而是给我一些指导。
游戏经历了多个阶段:首先是用户连接和登录。在他获得主持/加入游戏的选项后。在他加入游戏或有人加入游戏后,客户端进入游戏阶段。游戏是1v1,只需要每5秒来回发送一次数据(如果这很重要?)。我只需要一些关于如何设计客户端/服务器来完成这些“阶段”的指导。
这就是我目前正在考虑实施它的方式:
建立连接后,连接将具有描述服务器状态的相应变量。例如:0表示登录,1表示登录,2表示托管等...
每当客户端向服务器发送数据时,它都会检查状态并相应地处理它。就像在登录之前发送数据一样,服务器会假设它的登录详细信息,如果它们有效,它会将变量更改为1并告诉客户端提前。
有更好的方法吗?
答案 0 :(得分:2)
完全Java +客户端 - 服务器+游戏:
我建议你忘记使用直插座。
在我看来Java RMI是你最好的选择。
为什么:
一旦你学会了它,就比套接字容易。
您可以直接从Java客户端/服务器调用远程方法。
您可以使用回调。 (即客户端仍然连接的服务器测试)
可能还有更多原因......
答案 1 :(得分:1)
基本上你是如何描述它是如何完成的。只需让服务器监听客户端连接,然后在它们出现时在自己的线程中处理客户端连接。然后来回发送消息以确认状态(登录与退出,加入游戏等)和消息,同时在游戏中进行玩家移动。 TCP或UDP套接字在短期内都可以工作,但是最终您可能会切换到主要基于UDP的系统,因为服务器和客户端之间发送的消息相当小,延迟可能是关键,具体取决于游戏类型。
考虑通过JSON发送/接收消息(http://wiki.fasterxml.com/JacksonHome是我检查过的一个相当流行的Java解析器)。
此外,您需要在服务器端使用多种数据结构来有效地管理客户端及其状态。例如,您可以为每个客户端提供一个整数id,并使用Map<Integer, Client>
来存储所有当前连接的登录用户,其中Client
是存储该用户当前状态的对象。
希望这能为您提供一些从哪里开始的想法。
答案 2 :(得分:0)
您可以将Mina或Netty用作Nio套接字框架。在服务器和客户端中使用Java可以更容易地设计消息协议。当一个客户端移动时,您向服务器发送移动消息,然后服务器将消息推送回两个客户端。两个客户端在收到消息时一起移动。因此,如果避免网络延迟,两个客户端同步移动。 您可以看一下用java编写的开源游戏框架。