我正在做一个互联网游戏项目,涉及在两台普通家用电脑之间通过互联网发送小尺寸数据(1K到50K之间)。我关心的关键是延迟。
我理解TCP,UDP是最受欢迎的。 TCP是可靠的但比UDP慢,而UDP不安全,我必须实现自己的故障处理代码。
我只是想知道在两台普通家用电脑之间是否有其他协议可以发送/接收小数据?
从普通家用电脑来看,我认为它们具有正常的宽带(512kbps - 2Mkbps)以及全世界(可能在美国和日本之间)。
另一个大问题是:
如果我从一台(在英国)ping到另一台(在日本),我得到300毫秒的延迟。是否有可能找到一个协议或使用TCP / UDP发送/接收低于此300毫秒延迟的1KB数据?或ping应该是知道两个端点之间最低延迟的最快方法??
由于
答案 0 :(得分:3)
TCP标头是32个字节,而UDP标头只有16个字节。此外,由于UDP缺乏流量控制,因此永远不会出现客户端要求服务器减速的情况。 UDP几乎肯定会是最快的。 ICMP数据包的标头为20个字节,可能比UDP略慢。
我的官方建议是使用UDP,在接收端检测一些“丢弃数据包”。这就是所有Quake游戏和所有半条命/源游戏的运作方式。
关于英国和日本之间的ping操作,对于任何使用的协议,延迟几乎都是相同的。其中大部分是由光速和边缘路由器的拥塞决定的。
答案 1 :(得分:1)
你永远不会因为延迟而击败ping命令,因为它们使用ICMP,这是最轻量级的选择。
通常,对于游戏情况,使用UDP,主要是因为涉及的速度。通过良好的宽带连接,TCP应该没问题,并且可以使生活更轻松,因为您可以保证UDP中没有丢失的交付。
话虽如此,出于游戏目的,1K,尤其是50K,是非常大量的数据,特别是如果需要连续发送的话。如果你发送了那么多数据,期望并计划延迟 - 通常这意味着要预测整个线路会发生什么,并在数据通过时进行补偿,而不是等待数据到达。
答案 2 :(得分:0)
如果您想通过互联网进行通信,则强制使用IP系列协议。这并不妨碍您在IP 上创建自己的协议,但当然,它在延迟方面不会更快。您所能做的就是实施压缩,以最大限度地减少通过线路发送的有效负载。