本文档用于指导 JHM 服务在生产环境中的打包、部署、配置、联调和验收。
当前服务能力包括:
EE 55 固定帧协议解析AA 55 变长协议解析在项目根目录执行:
npm run build
如果只需要 Windows 包:
npm run build:win
如果只需要 Linux 包:
npm run build:linux
打包完成后生成目录:
dist/
生产实施部署文档.md
win-x64/
jhm-service.exe
生产实施部署文档.md
runtime/
config.json
alModel.json
生产实施部署文档.md
logs/
service/
install-service.ps1
uninstall-service.ps1
linux-x64/
jhm-service
生产实施部署文档.md
runtime/
config.json
alModel.json
生产实施部署文档.md
logs/
service/
install-service.sh
uninstall-service.sh
jhm-service.service.tpl
说明:
runtime/ 是现场主要维护目录。logs/ 为运行日志目录。service/ 为系统服务安装脚本模板。build/ 和 dist/ 目录。部署前确认以下信息已准备完成:
devices[].ip 与服务端实际看到的设备来源 IP 一致alModel.json 与平台物模型保持一致M主要配置文件:
runtime/config.json
推荐配置结构如下:
{
"send": {
"mode": "batch",
"flushIntervalMs": 60000,
"alignToMinute": true,
"includeDeviceIdField": true,
"deviceIdField": "n",
"publishOnShutdown": true,
"channels": ["aliyun"]
},
"logging": {
"enabled": true,
"console": true,
"dir": "./logs",
"filePrefix": "jhm-service",
"level": "info"
},
"tcp": {
"host": "0.0.0.0",
"port": 9000,
"maxConnections": 100,
"socketTimeoutMs": 120000,
"keepAlive": true,
"keepAliveDelayMs": 10000,
"noDelay": true,
"backlog": 128,
"maxBufferBytes": 8192
},
"mqtt": {
"protocol": "mqtt",
"host": "mqtt.ihemodialysis.com",
"port": 62283,
"username": "data",
"password": "data#2018",
"defaultTopicPrefix": "touxiji"
},
"aliyun": {
"enabled": true,
"tupleApiBaseUrl": "https://things.icoldchain.cn",
"tupleApiPath": "/device/info/getAliyunDeviceSecret",
"autoRegister": true,
"registerRetryMs": 60000,
"connectTimeoutMs": 15000
},
"protocol": {
"alModelPath": "./alModel.json",
"bloodPressure": {
"publishTime": true,
"flushImmediately": true
}
},
"devices": [
{
"deviceId": "JHM-001",
"ip": "169.254.233.58",
"name": "1号透析机"
}
]
}
sendmode:发送模式,支持 batch 和 immediateflushIntervalMs:批量发送周期,单位毫秒,当前推荐 60000alignToMinute:是否按整分钟对齐发送includeDeviceIdField:发送时是否在 payload 中带设备编号字段deviceIdField:设备编号字段名,当前默认 npublishOnShutdown:停机前是否补发一次缓存数据channels:发送通道,可选 mqtt、aliyun常见组合:
["mqtt"]["aliyun"]["mqtt", "aliyun"]loggingenabled:是否写本地日志文件console:是否输出控制台日志dir:日志目录filePrefix:日志文件名前缀level:日志级别,支持 debug、info、warn、errortcphost:监听地址,生产推荐 0.0.0.0port:TCP 监听端口maxConnections:最大连接数socketTimeoutMs:连接空闲超时时间keepAlive:是否启用 KeepAlivekeepAliveDelayMs:KeepAlive 首次探测延迟noDelay:是否关闭 Nagle 算法backlog:监听队列长度maxBufferBytes:单连接解码缓冲区上限mqttprotocol:通常填写 mqtthost:Broker 地址port:Broker 端口username:用户名password:密码defaultTopicPrefix:Topic 前缀topicTemplate:如使用模板模式,可替代默认前缀模式默认 Topic 规则:
{defaultTopicPrefix}/{deviceId}
aliyunenabled:是否启用阿里云tupleApiBaseUrl:三元组接口基础地址tupleApiPath:三元组接口路径autoRegister:是否允许自动注册registerRetryMs:三元组请求失败后的冷却重试时间connectTimeoutMs:阿里云设备连接超时时间protocolalModelPath:物模型文件路径bloodPressure.publishTime:是否上报血压时间字段 MbloodPressure.flushImmediately:血压报文到达后是否立即触发一次整包发送publishTime 规则:
true:上报 N/O/P/Mfalse:仅上报 N/O/PtrueflushImmediately 规则:
true:血压到达后,先缓存 N/O/P/M,再立即发送当前设备缓存中的整包物模型false:血压仅进入缓存,继续等待定时批量发送true如果平台不接收血压时间字段,可配置:
{
"protocol": {
"alModelPath": "./alModel.json",
"bloodPressure": {
"publishTime": false,
"flushImmediately": true
}
}
}
如果现场明确要求“只按分钟发送,不要血压即时触发”,可配置:
{
"protocol": {
"alModelPath": "./alModel.json",
"bloodPressure": {
"publishTime": true,
"flushImmediately": false
}
}
}
devices每台设备至少配置:
deviceIdipname注意事项:
ip 必须与服务端实际看到的客户端来源 IP 完全一致name,便于日志识别透析机指标默认先进入聚合器缓存,在批量模式下按 flushIntervalMs 周期整包发送。
血压报文示例:
AA 55 0E BA 00 78 50 59 08 08 08 08 08 10
解析结果:
00 78:收缩压 N50:舒张压 O59:脉搏 PM当 publishTime=true 时,血压指标示例:
{
"N": 120,
"O": 80,
"P": 89,
"M": "2026-04-15 09:30"
}
当 publishTime=false 时,血压指标示例:
{
"N": 120,
"O": 80,
"P": 89
}
当 flushImmediately=true 时,行为如下:
这样做的好处:
项目内置 TCP 模拟器:
npm run start:simulator -- --host 127.0.0.1 --port 9000
说明:
start:simulator 默认会带透析机报文和血压报文混合发送npm run start:simulator:bp自定义血压参数示例:
npm run start:simulator -- --bp-systolic 135 --bp-diastolic 88 --bp-pulse 76
建议目录:
C:\services\jhm\win-x64
试运行:
cd C:\services\jhm\win-x64
.\jhm-service.exe --config .\runtime\config.json
如需安装为服务,可使用:
cd .\service
.\install-service.ps1
卸载服务:
cd .\service
.\uninstall-service.ps1
建议目录:
/opt/jhm/linux-x64
试运行:
cd /opt/jhm/linux-x64
chmod +x ./jhm-service
./jhm-service --config ./runtime/config.json
如需安装为 systemd 服务,可参考:
cd ./service
chmod +x ./install-service.sh ./uninstall-service.sh
./install-service.sh
当前服务运行日志统一输出中文,默认写入:
runtime/logs 或配置中的 logging.dir
重点关注以下日志:
部署完成后建议执行:
npm test
npm run verify:commands
现场重点确认:
EE 55 报文解析正常AA 55 报文解析正常