我会尽力解释这种情况,但是如果我不清楚,请提出任何问题。
我的情况:我有两台计算机,A和B。在计算机A上,我有一个查看数据库并将其显示给用户的程序。在计算机B上,我有一个程序,用户进行的各种操作会导致数据最终最终存储在上述数据库中(通过许多第三方应用程序进行的间接过程)。
我的“目标”:我需要从对B进行操作的时间算起,我需要多长时间才能从A上的程序访问该数据。理想情况下,我需要缩小此范围误差低至50ms。
工具:
约束/路障
我认为这最终导致了某种数学问题,我将以某种方式对每台计算机内的消息使用时间戳的差异,而不是比较计算机之间的时间戳。因此,更多的是测量TCP通信工作需要多长时间,而不是查看该过程需要多长时间。如果有,我可以在事件发生时将消息从B发送到A,当数据可用时将消息从A发送到B,然后减去通信时间。如果这是我最好的选择,那么我实际上或从理论上都不知道如何设置它,因为我不能相信他们自己的时间戳。
此外,尽管我非常感谢一些答复/答案/想法-坦白地说,这是出于我的利益,因为我可以清楚地描述和思考该问题。此外,我找不到该问题的答案,因此希望在其他人遇到类似问题的情况下会弹出该问题。
答案 0 :(得分:0)
我无法从您写的内容中获得您的实际环境,但是:
基本要求是
如果我不能提供其中之一,那就没有办法解决。
如果本地计算机时间不能足够准确地同步,则需要设置自己的时间服务器。我会:
编写一个在B上运行的时间服务器,例如使用Win32 :: GetTickCount作为当前时间。
使B的当前时间可以通过tcp连接(或更准确地说是串行连接)访问A。
将时间存储在B上产生的记录/事件中
在A上检测到新的记录/事件时,从记录获取时间,并通过TCP连接从B获取当前时间。
不同的时间并获得结果。 (其中没有什么大数学)
您还可以使用网络驱动器作为传输当前时间的通道,但是我想同步文件访问有点棘手。我猜想TCP连接更容易建立。
也许从NAS使用“ LastWriteTime”可能是获取共享时间的另一种方法。如果一切正常,您可以连续在B上写一个文件,并在A上获取文件的LAstWriteTimeSTamp。这可能是您的时间服务器。
您可能想阅读有关在两台计算机之间建立TCP连接的信息,或研究如何分配/请求NAS中文件的LAstWriteTimestamp。
类似: 在B上:File.WriteAllText(“ \ nas \ timestamp.txt”,Guid.NewGuid()); 在A上:aTimeStamp = new FileInfo(“ \ nas \ timestamp.txt”)。LastWriteTime可能是LAstWriteTimeUTC。
您需要检查LastWriteTime和通过nas的延迟是否足够精确。
希望能有所帮助。