在客户端/服务器Java套接字之间同步时间

jav*_*uns 5 java sockets timezone synchronization serversocket

在这里,我正在开发一个具有Java套接字的项目,并且在服务器和客户端之间实现正确的时间同步方面存在问题。我将用一个简单的例子来描述问题:

服务器在GMT上运行,并保留包含各种项目的数据库。这些商品中有一些是特价商品,但是这些商品在到期前有时间限制。
因此,假设服务器时间现在是9:00 AM(GMT),并且有一个商品要在10:00 AM(GMT)结束。

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

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

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

让我担心的另一件事是,如果您确实要求“以秒为单位的剩余时间”,那么在慢速的网络上,服务器的响应将不会立即到来,因此在客户端收到结果之前,时间已经到了。

WeM*_*are 2

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

只需定期询问服务器时间即可。你不必每时每刻都做,而是在任何重要的事情发生之前(下订单)