2015-06-27 131 views
4

在这里,我正在开发一个带有java套接字的项目,并且在服务器和客户端之间执行正确的时间同步时遇到问题。 我会用一个简单的例子来说明问题:在客户端/服务器java套接字之间同步时间

服务器运行在格林尼治标准时间,并保持与各个项目的数据库。其中一些商品是特价商品,但这些商品在到期前有时间限制。
因此,让我们说,服务器时间现在9:00 AM(北京时间)并没有在10:00(GMT)结束要约项。

客户可以在比服务器不同的时间和时区。所以我们可以说,现在客户端时间是8:00 AM(GMT-1),我走的时候,把它调整到客户的时区,并发现它在1小时内结束于9:00 AM(GMT-1)即。

问题:如何计算用户设置了自定义时间的剩余时间。
例如,在上述客户端设置手动的时钟超前半小时,即8:30 AM(GMT-1)。如果您只是进行时区转换,那么该项目仍将以9:00(GMT-1)结束,因此要约完成的时间不正确(30分钟)。

有人可能会说,一个可能的解决方案是设置客户端问秒时从服务器,而不是确切日期结束的时间。但是我想在客户端实现类似秒数的倒计时。 (如果报价在60秒内结束,则界面将变为60,59,58,...,1,0)。因此,向服务器发送请求每秒以获得剩下的时间不是网络高效的。

还有一件让我担心的事情是,如果您确实要求“时间离开秒”的情况,那么在慢速网络上服务器的响应不会立即发生,所以当客户端收到结果已经关闭了。

+0

在测量一个基本原则是:如果绝对值是不准确的(甚至是未知的),用相对值,在这种情况下,这将是一次差异。 – alk

回答

1

最简单的方法是根本不使用客户端时间,因为它是不可靠的。

只需定期询问服务器时间。你不必做的每一个第二,但重要的事情发生了,而之前(命令作出)

+0

这将如何帮助我在不使用客户时间的情况下进行倒计时?我的意思是我需要找到一种方法来保持偏移量,以查看请求后已经过了多长时间 – javasuns

+0

只需发送订单到期前剩余的秒数而不是发送时间 – WeMakeSoftware

+0

但是这并不能解决慢速网络的问题 – javasuns

0

可以使用NTP协议。在服务器/客户端之间同步。

NTP标准使用GMT作为时间参考,并取决于您选择最近的ntp池的位置。

取决于你在世界NIST这里(美国)实现NTP

NTP实际使用分层服务器与时间源“铯钟”,具有纳秒的误差率。在GPS,货币交易中使用,而且很可能在您的计算机(如果它是类Unix)

相关问题