首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DatagramSocket与DatagramChannel的区别

DatagramSocket与DatagramChannel的区别
EN

Stack Overflow用户
提问于 2010-01-17 07:29:30
回答 3查看 9K关注 0票数 9

在大学的这一学期,我们必须以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人的实时多人游戏,哪一个是最好的?

EN

回答 3

Stack Overflow用户

发布于 2010-01-17 07:50:11

你不能先问第一个问题。第一个问题是:什么消息传递规则最适合这个游戏?

对于一小部分用户来说,UDP带来的麻烦完全超过了它的价值。你必须担心丢失的数据包,你必须想出一些方法将数据打包成小数据包,呀。

在4-8人的规模上,您可以与web服务互连并发送soap消息。这将为您处理所有的数据序列化。见鬼,你甚至可以使用JMS。

至于你的字面问题,通道是nio的一部分。它们支持多路复用等待,而Sockets不支持。如果你需要问‘这些端口上有没有给我的包?’你想要频道。如果没有它们,您需要一个每个端口的线程。当然,假设您有多个接收数据的端口。

票数 5
EN

Stack Overflow用户

发布于 2010-01-17 08:40:14

您的设计是否包括中央服务器,还是客户端-客户端?这可能会影响哪种技术适用于通信。

允许使用第三方库吗?如果是这样的话,我总是发现JGroups非常适合做可靠的多播。它简单易学,可配置性很强。(我不确定它是否适合实时游戏的性能,但我过去曾使用它处理过大量数据,从未出现过性能问题。)

票数 1
EN

Stack Overflow用户

发布于 2010-01-17 10:14:04

游戏是实时的,我不认为webservices真的适合这样做,对吗?

有可能,但无论基于互联网的技术使用什么,实时游戏都是有问题的:

  • 如果你想支持地球另一端的玩家,你将不得不处理1/2秒或更长数量级的网络延迟。
  • 如果你想支持另一个国家的玩家,你将需要处理由于网络拥塞导致的数据包丢失等导致的偶尔的“冻结”。
  • 如果你想支持大量的玩家,那么你必须处理扩展,包括本地资源使用和网络带宽。

因此,虽然网络传输的选择很重要,但它只是问题的一部分。设计应用层(游戏)协议以最小化网络延迟和冻结/数据包丢失对“玩家体验”的影响可能更重要。或者只是将游戏限制在局域网上使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2079370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档