跳到主要内容

22 篇博文 含有标签「版本更新」

查看所有标签

· 4 分钟阅读

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

新特性

1. 内置 HTTPS 和 WSS 支持

在之前的版本中,TSRPC 仅支持 http://ws:// 方式连接,如果需要 HTTPS / WSS,只能依赖前置代理实现(例如 nginx 或云厂商的负载均衡)。

3.4.0 中,我们给 HttpServerWsServer 新增了 httpswss 的选项,你可以不依赖前置代理进行 HTTPS / WSS 的配置,例如:

let server = new HttpServer(serviceProto, {
// 启用 HTTPS
https: {
key: fs.readFileSync('cert/xxx.key'),
cert: fs.readFileSync('cert/xxx.crt')
},
// ...
})
let server = new WsServer(serviceProto, {
// 启用 WSS
wss: {
key: fs.readFileSync('cert/xxx.key'),
cert: fs.readFileSync('cert/xxx.crt')
},
// ...
})
提示

SSL 证书可以去阿里云、腾讯云免费申请。
申请教程:https://developer.aliyun.com/article/875508

注意事项

  1. 一旦配置了 httpswss,就不再能通过 http://ws:// 访问。如果需要同时支持 HTTPS / HTTP,你可以选择同时创建两个在不同端口的 HttpServer,或者依靠前置代理实现。
  2. 如果你前置了 nginx 或负载均衡,请确保前置代理和 TSRPC 服务,仅在一处配置了 HTTPS 证书即可。例如如果你在负载均衡中配置为 HTTPS 转发,则后端服务器无需再设置 https 选项。

2. 支持自定义 module 路径解析

TypeScript 的模块规范中支持两种 import 路径:相对路径和全局路径。 对于全局路径(即不以 ./ 开头的路径),可以在 tsconfig.json 中配置 paths 选项来自定义路径解析。

TSRPC 由于是轻量化的 TypeScript 类型系统实现,所以不包含上述逻辑。 但在 tsrpc-cli@2.4.4 中,我们为 tsrpc.config.tsproto 配置中增加了一个 resolveModule 的选项,来让你可以灵活的支持此项特性。

例如,有如下 tsconfig.json

tsconfig.json
{
"compilerOptions": {
"paths": {
"@lib/*": [
"./src/shared/lib/*",
]
},
}
}

期望将全局路径 @lib/* 映射为 ./src/shared/lib/* (相对于当前命令行路径)。在新版本中,只需如下修改 tsrpc.config.ts 即可支持:

tsrpc.config.ts
const tsrpcConf: TsrpcConfig = {
proto: [{
ptlDir: path.resolve(__dirname, './src/shared/protocols'),
output: path.resolve(__dirname, './src/shared/protocols/serviceProto.ts'),
resolveModule: v => {
if(v.startsWith('@lib/')){
return v.replace('@lib', path.resolve('./src/shared/lib'));
}
return v;
}
}]
}

3. 对 copy 同步方式新增 readonly 选项

tsrpc.config.tssync 配置新增 readonly 选项,默认为 true。 用于配置当 type: 'copy' 时,是否以只读模式复制文件。

tsrpc.config.ts
const tsrpcConf: TsrpcConfig = {
sync: [{
from: './src/shared',
to: '../frontend/src/shared',
type: 'copy',
// 复制,但不设为只读
readonly: false
}],
}

优化和问题修复

  1. 修复 MacOS 创建 Symlink 失败的问题
  2. 修复 WebSocket 由于未设置 onerror 方法在 Cocos Creator 上的报错问题
  3. preRecvDataFlow 中移除了 serviceName 参数,由 serviceId 代替
  4. 优化了日志颜色
  5. 支持 Api 和 Msg 同名

升级方式

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

本次更新涉及以下 NPM 包:

  • tsrpc@3.4.0
  • tsrpc-browser@3.4.0
  • tsrpc-miniapp@3.4.0
  • tsrpc-cli@2.4.4

升级方式:

后端

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

前端

浏览器项目:

npm i tsrpc-browser@latest

小程序项目:

npm i tsrpc-miniapp@latest

· 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

· 1 分钟阅读

tsrpctsrpc-cli 迎来例行更新。

tsrpc@3.2.3 更新内容

新增

  • 当工作流被 "Pre Flow" 中断时,打印 Debug 级别的日志,以便调试

调整

  • 日志 [ResErr] 更名为 to [ApiErr],以与客户端日志保持一致
  • 日志 [ApiRes][ApiErr] 改为在发送数据前打印,在发送数据阶段导致的错误日志由 [SendDataErr] 代替
  • 当在 preSendDataFlowreturn undefined 后, 不再向客户端发送 "Internal Server Error"。现在可以在 preSendDataFlow 中通过 conn.httpReq.end(data) 自行处理数据发送了。

修复

  • 移除部分无用代码

升级方式

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

升级方式:

后端

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

致谢

感谢社区开发者 @喵喵 提供的反馈

· 1 分钟阅读

tsrpctsrpc-cli 迎来例行更新。

tsrpc@3.2.2 更新内容

修复

  • postDisconnectFlow 在手动调用 disconnect() 时未触发的 BUG

升级方式

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

升级方式:

前端

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

致谢

感谢社区开发者 @今日阳光正好 提供的反馈

· 2 分钟阅读

tsrpctsrpc-cli 迎来例行更新。

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

升级方式:

后端

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

前端

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

更新内容

TSRPC 3.2.0

新特性

  • 支持 keyof 类型,现在可以正常解析 type A = keyof B
  • 支持在 Pick Omit 的第二个参数中使用 keyof 及引用类型
  • 支持在 PickOmit 的第一个参数中使用 Union Type 和 Intersection Type
  • 支持 interface 继承自 Pick Omit
  • 支持将字段类型设为枚举值,将被视为字面量
    export enum Types {
    Type1,
    Type2
    }
    export interface Obj {
    type: Types.Type1,
    value: string
    }

变更

  • SchemaType 由 enum 变为 class

tsrpc-cli 2.4.0

新特性

  • 支持新的 keyof 等类型生成

Bug 修复

  • 修复生成文档中,Pick Omit 的类型错误

· 2 分钟阅读

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

升级方式:

npm i tsrpc@latest tsrpc-cli@latest

TSRPC 3.1.4

新特性

  • WsServer 自动检测传输格式是 JSON 还是二进制,Server 端设置 json: true 将可以同时兼容二进制和 JSON 传输格式

Bug 修复

  • 修复 index.d.ts 类型定义错误(感谢 @慢吞吞 提交此问题)
  • 修复淘宝云函数平台下,Header 为 application/json; charset=utf-8 时传输类型判断错误的 Bug(感谢 @董帅 提交此问题)
  • 修复当 URL 中有 ?xxx=xxx 参数时,解析调用路径错误的 Bug (感谢 @董帅 提交此问题)

tsrpc-cli 2.3.0

新特性

  • dev 命令新增 --entry 选项来指定程序入口文件,例如 tsrpc-cli dev --entry src/xxx.ts (感谢 @雄贰 的建议)

  • doc 命令现在支持多级目录嵌套分组了(感谢 @喵喵 的建议)

  • doc 命令生成的 Markdown 文档中加入 API 接口目录

  • 为避免混淆,默认命令 tsrpc 更名为 tsrpc-cli

Bug 修复

  • 当使用 type 别名定义请求、响应类型时,注释没有生效的 Bug(感谢 @喵喵 提交此问题)

· 1 分钟阅读

tsrpc@3.1.4 更新内容

Added

  • WsServer now support client use buffer as transfering format when server set json: true

Fixed

  • Type error when disable skipLibChecks
  • Cannot resolve JSON when headers is application/json; charset=utf-8
  • Cannot resolve serviceName when there is query string in the URL