跳到主要内容

TSRPC 3.4.0 更新!新增 HTTPS / WSS 等多项支持

· 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