1

我正在开发一个应用程序,该应用程序通过 Java 程序链接两个不同的机器人模拟环境。一个模拟环境(我们称之为 A)将机器人的当前状态发送到 Java 应用程序,Java 应用程序进行一些计算,然后将有关此当前状态的数据以及其他一些信息发送到另一个模拟环境(我们称之为它B)。模拟 B 然后更新机器人的状态以匹配模拟 A 的版本。

问题是随着程序继续运行,模拟 B 开始落后于模拟 A 正在做的事情。这种滞后不断增加,因此在一分钟左右后模拟 B 落后了几秒钟。

我正在使用 TCP 套接字在这些环境和 Java 程序之间发送数据。从套接字编程的背景阅读中,我发现快速连续打开和关闭套接字是不好的做法,所以我目前正在做的只是保持两个套接字打开。我有一个循环运行,它从 Sim A 获取数据,进行一些计算,然后将位置数据发送到 Sim B,然后我让线程等待 100 毫秒,然后循环重复。需要明确的是,发送给 B 的位置数据与从 A 接收的数据没有改变。

在研究了延迟问题后,有人向我建议,对于数据流来说,打开和关闭套接字实际上是一个好主意,因为如果你保持套接字打开,如果一个模拟比另一个模拟需要更长的时间来处理事情,你最终位置数据在缓冲区中堆积并按顺序读取,而不是读取最新数据。这是真的?重写我的代码以每 100 毫秒打开和关闭一次套接字可能会消除延迟吗?或者这不是套接字实际工作的方式?

编辑澄清:模拟保持同步比发送所有位置数据更重要,换句话说,为了保持同步,不传递所有数据点是可以接受的。

除了保持套接字打开导致问题之外,是否有人对可能导致延迟问题的原因有任何想法?

提前感谢您的任何见解/建议/提示!

4

1 回答 1

0

您对使用单个连接是正确的。数据确实可以备份,但使用多个连接并不会改变这一点。

这里的基本问题是 Java 程序能否像机器人发送数据一样快地进行计算。如果不能,它就会落后。你可以对网络做各种事情来加速它,但如果计算跟不上,它们是徒劳的。所以你需要调查你的时间安排。

于 2013-01-29T23:56:46.570 回答