跳到主要内容

TSRPC 3.3.0 更新!新增心跳检测,Log Level 支持

· 4 分钟阅读

tsrpctsrpc-browsertsrpc-miniapptsrpc-cli 迎来例行更新。

新特性

1. 心跳检测

心跳检测是长连接服务常见的机制,TSRPC 3.3.0 版本增加了对这一特性的支持,使用方式如下:

客户端发起心跳检测

无需修改 Server 端,通过 Client 配置项 heartbeat 即可配置心跳检测行为,例如:

重要

心跳检测仅对长连接(如 WebSocket)有效。

let client = new WsClient(serviceProto, {
// ...
heartbeat: {
// 两次心跳检测的间隔时间(毫秒)
interval: 8000,
// 发出心跳检测包后,多长时间未收到回复视为超时(毫秒),超时将使连接断开
timeout: 5000
}
});

服务端断开未正常发送心跳包的连接

Server 端不会主动发送心跳包,但是可以配置 heartbeatWaitTime 来实现 断开超时未收到心跳包的连接,如下:

let server = new WsServer(serviceProto, {
// 超过 10 秒未收到心跳包,则断开该连接
// 注意,这个值需要大于客户端的 heartbeat.interval(2倍以上为宜)
heartbeatWaitTime: 10000
});

2. Logger 新特性

Server 和 Client 均可以通过 logger 来自定义日志行为。

在 TSRPC 3.3.0 中,增加了一项名为 logLevel 的配置,它可以和 logger 搭配使用,例如:

let server = new HttpServer(serviceProto, {
logger: myLogger,
// 只打印 warn error 日志
logLevel: 'warn'
})

let client = new WsClient(serviceProto, {
logger: myLogger,
// 打印所有日志(默认)
logLevel: 'debug',
})

此外,在开发长连接服务时,Message 消息收发可能会非常频繁。 你可能希望在控制台隐藏 [SendMsg][RecvMsg] 日志, 可以通过 3.3.0 中增加的新配置项 logMsg 实现。

let client = new WsClient(serviceProto, {
// 不打印 [SendMsg] 和 [RecvMsg] 日志
logMsg: false
})

优化和问题修复

  1. npm run dev 期间,会触发 serviceProto 重新生成的监视目录由 src/shared/protocols 改为 src,以解决协议依赖修改但协议未重新生成的问题;也可以通过配置项 TsrpcConfig.proto.watch 来自定义。
  2. npm run dev 启动前自动执行 npm run sync (之前是只执行 link
  3. 修复因移动项目目录导致的 Symlink 关联错误
  4. HttpServer 在 JSON 模式下,增加响应头以解决在开发者工具中中文乱码的问题。

升级方式

所有更新均向后兼容,您可以根据项目需要选择升级与否。

本次更新涉及以下 NPM 包:

  • tsrpc@3.3.0
  • tsrpc-browser@3.3.0
  • tsrpc-miniapp@3.3.0
  • tsrpc-cli@2.4.1

升级方式:

后端

npm i tsrpc@latest
npm i tsrpc-cli@latest -D

前端

npm i tsrpc-browser@latest
npm i tsrpc-miniapp@latest