同步客户端/服务器Java套接字

时间:2015-06-27 06:43:49

标签: java sockets timezone synchronization serversocket

在这里,我正在使用java套接字开发一个项目,我在服务器和客户端之间实现正确的时间同步时遇到了问题。 我将用一个简单的例子来描述问题:

服务器在GMT上运行并保留包含各种项目的数据库。其中一些项目是特价商品,但这些商品在到期前有时间限制。
所以我们说 服务器时间 现在 9 :00AM(格林尼治标准时间)并且有一个优惠项目在 10:00 AM(GMT)结束

客户端可能与服务器位于不同的时间和时区。因此,假设现在客户端时间上午8:00(GMT-1),我可以花时间将其调整到客户的时区,并发现它在上午9:00结束(GMT- 1)即1小时内。

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

可以说可能的解决方案是将客户端设置为从服务器询问剩余的时间,而不是确切的结束日期。但是我希望在客户端实现类似秒数的计数。 (如果报价在60秒内结束,界面将为60,59,58,...,1,0)。因此,向服务器发送每秒请求以获得剩余时间并不具备网络效率。

让我担心的另一件事是,如果你确实采用了请求“以秒为单位的时间”的情况,在慢速网络上服务器的响应将不会立即出现,所以当客户端收到结果时已经过时了。

2 个答案:

答案 0 :(得分:1)

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

定期询问服务器时间。你不必每一秒都做,而是在重要事情发生之前(订单已经发生)

答案 1 :(得分:0)

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

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

取决于您在世界上的位置NIST(在我们中)实施NTP

NTP实际上使用具有时间源a"铯时钟"的层服务器,误差分数为纳秒。用于GPS,货币交易和您的计算机(如果它是类似unix的)