在大学的这一学期,我们必须以4人为一组编写网络游戏(用java编写),我已经自愿为我的团队编写网络代码。
读一读java网络,似乎有两种UDP网络方法:
https://docs.oracle.com/javase/1.5.0/docs/api/java/net/DatagramSocket.html。这是一个标准外观的UDP套接字,可以将数据包发送到任何端口的任何IP地址。
https://docs.oracle.com/javase/1.5.0/docs/api/java/nio/channels/DatagramChannel.html。这是一种建立在udp套接字之上的通道系统。我不完全确定它提供了什么,除了只能连接到一个客户端的能力,这在这种情况下并不是很有用。
这是唯一的选择吗?对于4-8人的实时多人游戏,哪一个是最好的?
发布于 2010-01-17 07:50:11
你不能先问第一个问题。第一个问题是:什么消息传递规则最适合这个游戏?
对于一小部分用户来说,UDP带来的麻烦完全超过了它的价值。你必须担心丢失的数据包,你必须想出一些方法将数据打包成小数据包,呀。
在4-8人的规模上,您可以与web服务互连并发送soap消息。这将为您处理所有的数据序列化。见鬼,你甚至可以使用JMS。
至于你的字面问题,通道是nio的一部分。它们支持多路复用等待,而Sockets不支持。如果你需要问‘这些端口上有没有给我的包?’你想要频道。如果没有它们,您需要一个每个端口的线程。当然,假设您有多个接收数据的端口。
发布于 2010-01-17 08:40:14
您的设计是否包括中央服务器,还是客户端-客户端?这可能会影响哪种技术适用于通信。
允许使用第三方库吗?如果是这样的话,我总是发现JGroups非常适合做可靠的多播。它简单易学,可配置性很强。(我不确定它是否适合实时游戏的性能,但我过去曾使用它处理过大量数据,从未出现过性能问题。)
发布于 2010-01-17 10:14:04
游戏是实时的,我不认为webservices真的适合这样做,对吗?
有可能,但无论基于互联网的技术使用什么,实时游戏都是有问题的:
因此,虽然网络传输的选择很重要,但它只是问题的一部分。设计应用层(游戏)协议以最小化网络延迟和冻结/数据包丢失对“玩家体验”的影响可能更重要。或者只是将游戏限制在局域网上使用。
https://stackoverflow.com/questions/2079370
复制相似问题