โมดูล Node.JS เพื่อดึงเวลาปัจจุบันจากเซิร์ฟเวอร์ NTP และส่งคืนข้อมูลออฟเซ็ต
NTP ต้องการ UDP ซึ่งไม่สามารถใช้งานได้ในบริบทของเบราว์เซอร์!
# using Yarn
$ yarn add ntp-time-sync
# using NPM
$ npm install ntp-time-sync
พิจารณาใช้ไลบรารีเป็นซิงเกิลตัน เพื่อไม่ให้ทุกการเรียก getTime
เรียกใช้แพ็คเกจ NTP ใหม่ ห้องสมุดจะจัดการเวลาการสำรวจความคิดเห็นขั้นต่ำ/สูงสุดเอง
คำขอหลายรายการไปยังเซิร์ฟเวอร์เวลา NTP หลายรายการเริ่มทำงาน และการตอบกลับจะถูกรวมเข้าด้วยกัน
// ES6:
import { NtpTimeSync } from "ntp-time-sync" ;
// pre-ES6:
// const NtpTimeSync = require("ntp-time-sync").NtpTimeSync;
const timeSync = NtpTimeSync . getInstance ( ) ;
// request 1
timeSync . getTime ( ) . then ( function ( result ) {
console . log ( "current system time" , new Date ( ) ) ;
console . log ( "real time" , result . now ) ;
console . log ( "offset in milliseconds" , result . offset ) ;
} )
// request 2, will use cached offset from previous request
timeSync . getTime ( ) . then ( function ( result ) {
console . log ( "current system time" , new Date ( ) ) ;
console . log ( "real time" , result . now ) ;
console . log ( "offset in milliseconds" , result . offset ) ;
} )
// ES2017 style
const result = await timeSync . getTime ( ) ;
console . log ( "real time" , result . now ) ;
<ntpTimeSyncInstance>.getTime()
ส่งคืนออบเจ็กต์ Promise
ซึ่งจะได้รับการแก้ไขในที่สุดด้วยออบเจ็กต์ที่มีข้อมูลต่อไปนี้:
คุณสมบัติ | คำอธิบาย |
---|---|
now | เวลา NTP ปัจจุบัน ("เรียลไทม์") |
offset | คำนวณออฟเซ็ตระหว่างเวลาระบบท้องถิ่นและเวลา NTP |
<ntpTimeSyncInstance>.now()
ส่งคืนอ็อบเจ็กต์ Date
ซึ่งมีเวลาที่ถูกต้องสำหรับช่วงเวลาที่เรียกใช้ฟังก์ชัน ตรงกันข้ามกับ getTime()
ซึ่งจะส่งคืนเวลาที่ถูกต้องในขณะที่สัญญาได้รับการแก้ไข
คุณสามารถส่งตัวเลือกที่กำหนดเองไปยังตัวสร้างของ NtpTimeSync
หรือ NtpTimeSync.getInstance(options)
สิ่งเหล่านี้จะถูกรวมเข้ากับค่าเริ่มต้นต่อไปนี้:
const defaultOptions = {
// list of NTP time servers, optionally including a port (defaults to 123)
servers : [
"0.pool.ntp.org" ,
"1.pool.ntp.org" ,
"2.pool.ntp.org" ,
"3.pool.ntp.org"
] ,
// required amount of valid samples in order to calculate the time
sampleCount : 8 ,
// amount of time in milliseconds to wait for a single NTP response
replyTimeout : 3000 ,
// defaults as of RFC5905
ntpDefaults : {
port : 123 ,
version : 4 ,
tolerance : 15e-6 ,
minPoll : 4 ,
maxPoll : 17 ,
maxDispersion : 16 ,
minDispersion : 0.005 ,
maxDistance : 1 ,
maxStratum : 16 ,
precision : - 18 ,
referenceDate : new Date ( "Jan 01 1900 GMT" )
}
} ;