Java网络程序;(滞后问题) 1 周,4 日 Questions & Answers 174 我做了一个实时游戏,它现在非常滞后。 我看到,对于实时游戏,我使用“UDP协议”而不是“TCP”编写代码 这能解决滞后问题吗?以“UDP”形式更改我的代码真的很难吗 谢谢大家!
# 1 楼答案 这能解决滞后问题吗 UDP协议比TCP快一点,因为它缺少两个附加值: 这是不可靠的-它不检查数据包是否成功到达。如果出现网络问题,数据包可能会丢失李> 它也不能保证数据包是否按顺序到达李> 当一切正常时(确认正确传递所需的额外握手消息),它们会产生较小的额外延迟;当网络出现错误时(额外重试数据包、接收器等待/重新排序),它们会产生较大的延迟 对于游戏来说,你可能不需要这些额外的服务 你会注意到其中的区别吗?不一定 底层网络的速度、流量负载和网络路由器/交换机跳数对单个数据包的性能有很大影响。您可能没有注意到千兆本地局域网内的任何差异,但可能会看到无线网络之间的微小差异和互联网上的巨大差异。糟糕的路由器设置和繁忙的网络显然会让事情变得更糟 了解您的网络路径并检查速度&;网络上的可靠性/错误,请使用 命令行ping&traceroute/tracert 一种网络检查工具,例如LAN Speed Test或NetStatLive或testmy.net 另见How Fast Is Your Network? 以“UDP”形式更改我的代码真的很难吗 没有 而不是使用java.net.Socket和java.net.ServerSocket使用java.net.DatagramSocketx2 http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
# 1 楼答案
这能解决滞后问题吗
UDP协议比TCP快一点,因为它缺少两个附加值:
当一切正常时(确认正确传递所需的额外握手消息),它们会产生较小的额外延迟;当网络出现错误时(额外重试数据包、接收器等待/重新排序),它们会产生较大的延迟
对于游戏来说,你可能不需要这些额外的服务
你会注意到其中的区别吗?不一定
底层网络的速度、流量负载和网络路由器/交换机跳数对单个数据包的性能有很大影响。您可能没有注意到千兆本地局域网内的任何差异,但可能会看到无线网络之间的微小差异和互联网上的巨大差异。糟糕的路由器设置和繁忙的网络显然会让事情变得更糟
了解您的网络路径并检查速度&;网络上的可靠性/错误,请使用
ping
&traceroute
/tracert
另见How Fast Is Your Network?
以“UDP”形式更改我的代码真的很难吗
没有
而不是使用
java.net.Socket
和java.net.ServerSocket
使用java.net.DatagramSocket
x2http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html