Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在客户端/服务器java套接字之间同步时间_Java_Sockets_Timezone_Synchronization_Serversocket - Fatal编程技术网

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

在客户端/服务器java套接字之间同步时间,java,sockets,timezone,synchronization,serversocket,Java,Sockets,Timezone,Synchronization,Serversocket,在这里,我正在开发一个使用java套接字的项目,在服务器和客户端之间实现正确的时间同步时遇到了一个问题。 我将用一个简单的例子来描述这个问题: 服务器运行于格林尼治标准时间,并保存一个包含各种项目的数据库。其中一些商品是特价商品,但这些商品在过期之前有一个时间限制。那么让我们假设服务器时间现在是9:00AM(GMT),并且有一个商品在10:00AM(GMT)结束 客户端可能位于与服务器不同的时区。假设客户机现在的时间是8:00AM(GMT-1),我可以将时间调整到客户机的时区,发现它在9:00A

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

服务器运行于格林尼治标准时间,并保存一个包含各种项目的数据库。其中一些商品是特价商品,但这些商品在过期之前有一个时间限制。
那么让我们假设服务器时间现在是9:00AM(GMT),并且有一个商品在10:00AM(GMT)结束

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

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

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


另一件让我担心的事情是,如果您确实使用请求“以秒为单位的剩余时间”的场景,那么在缓慢的网络上,服务器的响应不会立即出现,因此当客户端收到结果时,已经是关闭时间。

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

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

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

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

取决于您在世界上的位置(在美国)实施NTP


NTP实际上使用带有时间源的“铯时钟”的地层服务器,误差分数为纳秒。用于全球定位系统、货币交易和您的计算机(如果是类似unix的)

这将如何帮助我在不占用客户时间的情况下进行倒计时?我的意思是,我需要找到一种方法来保持一个偏移量,以便查看自请求以来经过了多少时间只需将订单到期前剩余的秒数发送给客户端,而不是发送时间,但这并不能解决网络速度慢的问题如果服务器响应完成60秒,响应到达客户端则延迟10秒错误10秒测量的基本规则是:如果绝对值不准确(甚至未知),使用相对值,在这种情况下,这将是时间差。