gpt4 book ai didi

java - 实时服务器/客户端应用程序滞后

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:32 25 4
gpt4 key购买 nike

我正在创建一个实时服务器客户端应用程序,其中服务器发送一些绘画命令,客户端绘制它们。我在我的 Mac 中开发了整个应用程序。一切都实时运行,没有错误,所以我决定在我的 Windows 机器上测试它。

经过大量的调试和测试,我已经隔离了问题。服务器每 15 毫秒发送一个命令。每个环境中的行为都会发生巨大变化

苹果电脑

客户端收到具有不同响应时间的订单(结果 = 实时应用程序)

System.currentTimeMillis()
Calling repaint: 1428155128955//Reception Time different
Calling repaint: 1428155129162
Calling repaint: 1428155129178

Windows

客户端同时收到多个订单(结果=滞后应用程序)。最多同时收集 5 个订单

System.currentTimeMillis()
Calling repaint: 1428155129524//Reception time the same
Calling repaint: 1428155129524
Calling repaint: 1428155129524

我想强调的是,在具有相同互联网连接的两个环境中相同的可运行jar,我上传了两个视频来说明问题

MAC 视频 - 实时 https://youtu.be/OhNXdGXoQpk

Windows 视频 - 滞后 https://youtu.be/OhNXdGXoQpk

我还在 Windows 中进行了实时 VisualVM 视频:https://youtu.be/cRNX4b3rlZk 。我没有看到任何奇怪的东西可以解释为什么会出现滞后,但我还远不是专家(抱歉质量低)。

另外我也尝试过

  • 增加堆大小
  • 使用特殊的垃圾收集器

    -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts

什么会对性能产生如此巨大的影响?有可行的解决办法吗?

我不知道是什么原因导致了延迟。

提前谢谢

更新

按照@Hannes的建议,我嗅探了服务器和客户端之间的所有流量,结果如下:

数据包到达的时间不同。但我不知道为什么数据包会累积(这是一个简单的 TCP 连接):

 clientSentence = inFromClient.readLine();
System.out.println("Arrived: "+ System.currentTimeMillis());
//paint

并且同时被读取。

更让我困扰的是为什么它在我的 Mac 环境下可以工作......

我还测试了Socket.setTcpNoDelay(boolean),没有任何改进

最佳答案

尝试关闭延迟发送。尝试使用Socket.setTcpNoDelay(boolean) .

关于java - 实时服务器/客户端应用程序滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com