我会尽力解释情况,但如果我不清楚,请提出任何问题。
我的情况:我有两台计算机,A 和 B。在计算机 A 上,我有一个程序可以查看数据库并将其显示给用户。在计算机 B 上,我有一个程序,其中用户的各种操作导致数据最终进入所述数据库(通过许多第三方应用程序进行的非常间接的过程)。
我的“目标”:我需要从对 B 执行操作的时间开始计算,我需要多长时间才能从 A 上的程序访问该数据。理想情况下,我需要将其缩小到50ms 的误差范围。
工具:
- 计算机 A 和 B 共享本地连接
- 它们可以通过 TCP 进行通信——我以前使用 C# 进行这种通信。我知道这样说不准确,但是我们可以有效地将通信时间 B->A 和 A->B 视为常数(但每个方向都是自己的常数)
- 他们可以访问共享的 NTFS 格式的网络驱动器。
- 我可以在 B 上以可忽略的程度判断(为此目的,O(n) 实际上为零),当执行该操作时
- 当一个值可以从 A.
约束/障碍
- 计算机 B 无法访问 Internet
- 不能相信时钟是同步的——即使当前时间看起来是同步的。我已经看到两台计算机上的时钟以分钟为单位相互偏离。我不知道网络驱动器上的时间戳是如何确定的。
- 虽然 TCP 通信中的有效时间对我来说是恒定的,但我不知道这些常量(A->B 和 B->A)是什么或如何测量它们。
- 操作和检索发生在第三方程序中,数据库是另一个数据库的反映,我无法访问这些值所在的服务器。
- (编辑/添加)计算机 B 不知道数据何时进入数据库,只有当将其放置在那里的动作触发时才知道。
我认为这最终会变成某种数学问题,我会以某种方式使用每台计算机内消息的时间戳差异,而不是比较计算机之间的时间戳。因此,更多的是测量 TCP 通信工作需要多长时间,而不是查看该过程需要多长时间。如果我有,我可以在事件发生时从 B 向 A 发送消息,在数据可用时从 A 向 B 发送消息,然后减去通信时间。如果这是我最好的选择,我不知道我将如何设置它,实际上或理论上,因为我不能相信他们自己的时间戳。
此外,虽然我会非常感谢一些回应/答案/想法 - 老实说,这是我写作的一部分,这是为了让我清楚地描述和思考这个问题。此外,我找不到这个问题的答案,所以如果其他人在路上遇到类似的问题,希望这会弹出。