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

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')
    },
    // ...
})
复制代码

Tips

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

注意事项

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

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

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

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

例如,有如下 tsconfig.json

{
  "compilerOptions": {
    "paths": {
      "@lib/*": [
        "./src/shared/lib/*",
      ]
    },
  }
}
复制代码

期望将全局路径 @lib/* 映射为 ./src/shared/lib/* (相对于当前命令行路径)。在新版本中,只需如下修改 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' 时,是否以只读模式复制文件。

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 包:

升级方式:

后端

npm i tsrpc@latest
npm i tsrpc-cli@latest -D
复制代码

前端

浏览器项目:

npm i tsrpc-browser@latest
复制代码

小程序项目:

npm i tsrpc-miniapp@latest
复制代码

猜你喜欢

转载自juejin.im/post/7109133995832508424
wss