NTP 授时(Network Time Protocol)核心解读,工控机electron程序自动联网授时案例

最近公司的工控机产品遇到一个问题,工控机是离线使用的,但是客户对于时间要求又比较高,要精确到秒,不能有太大误差。所以怎么能快速授时这个问题一直萦绕在我脑海里...

一、前提描述

公司的应用程序是一个electron开发的桌面端应用程序,安装在windows10系统中,内网使用,不联网,并且没有wifi功能。

二、灵感来源

周末逛商场,看到一个卖家居的大卖场,路过一排时钟的货架,超级多好看的时钟,正在我惊叹于好久没看到这么多精美的时钟的时候,一个二维码赫然出现在我眼前,链接wifi后自动校时的wifi挂钟,手机共享热点也可以完成wifi链接

时钟联网调整时间

我心想,"我靠,我怎么没想到还能有这种操作?"

好吧,其实我之前想到了我们产品能怎么联网调整一下时间,但是思路受限就没有继续往下思考。

视频中是通过wifi进入一个设置网页,实现定时设置时间的。

三、解决思路

我想的是人为定期点击一个按钮,实现一键校准时间的功能:

  • 1、手机通过usb数据线连接工控机usb接口,开启手机USB网络共享功能,让工控机联网
  • 2、在设置界面添加"在线授时"按钮,弹窗提示实现授时流程
  • 3、用户选择NTP服务器点击完成授时

关键点 就是ntp-clientsudo-prompt两个库的使用,ntp-client实现从NTP 服务器获取时间,sudo-prompt实现让Node.js/Electron 程序以「管理员 / 超级用户权限」执行系统命令,解决普通权限下无法操作系统级功能的问题。

遇到的小问题 ,测试过程中发现,命令行手动更新时间失败,原因是错误核心原因:Windows 系统区域 / 语言设置为中文(简体)时,date命令不识别MM-dd-yyyy(月 - 日 - 年)格式(如03-16-2026),中文环境下date命令默认要求「年月日」格式(如2026-03-16),导致执行date 03-16-2026提示 "系统无法接受输入的日期"。

此处关键 :美式区域用MM-dd-yyyy,中文区域用yyyy-MM-dd,月份与日需要前面补0

四、拓展学习NTP 授时(Network Time Protocol)

NTP(网络时间协议)是专门用于在计算机网络中同步所有设备系统时间的标准化网络协议,你可以把它理解成「网络世界的统一时间校准员」------ 解决不同设备(比如你的工控机、手机、服务器)因本地时钟漂移导致的时间不一致问题,是目前互联网最主流、精度最高的时间同步协议。

底层传输:基于 UDP 协议 (无连接、低延迟),固定使用123 端口,这是 IANA 为 NTP 专属分配的端口,所有合规 NTP 服务器都监听这个端口。

我是用的几个ntp服务器地址:

JavaScript 复制代码
//  国内NTP服务器列表(按优先级排序)
const NTP_SERVERS = ['cn.pool.ntp.org', 'ntp1.aliyun.com', 'ntp.ntsc.ac.cn', 'time1.cloud.tencent.com', 'cn.ntp.org.cn'];

总结

随心记录,哈哈

相关推荐
先吃饱再说1 小时前
React 组件通信:从 Props 单向传递到自定义事件
前端·react.js·前端框架
swipe1 小时前
05|(前端转后全栈)不手写一堆 SQL,后端怎么操作数据库?MyBatis-Plus 入门
前端·后端·全栈
Allshadow1 小时前
Nest.js - 连接数据库
javascript·nestjs
冰暮流星1 小时前
javascript之date对象
开发语言·javascript·ecmascript
swipe1 小时前
04|(前端转后全栈)前端状态为什么不够用?从页面数据到 MySQL 持久化
前端·后端·全栈
橘子星1 小时前
别光看教程!手把手拆解 React Todo 项目,一文吃透 5 个核心概念
前端·javascript
大白要努力!1 小时前
纯前端实现 PDF 加水印工具 —— 零后端、支持中文、实时预览
前端·pdf·html
石小石Orz1 小时前
TRAE SOLO实战:实现一个桌面3D助手
前端·人工智能
蜡台1 小时前
使用 uni-popup 实现数据选择器Data-Picker
前端·javascript·html·uniapp·uni-popup·data-picker
拆房老料1 小时前
BaseMetas FileView 1.2.0 发布:Office/WPS 大文件预览与内存安全优化实测
前端·产品运营·开源软件