k8w / tsrpc

A TypeScript RPC framework, with runtime type checking and serialization, support both HTTP and WebSocket. It is very suitable for website / APP / games, and absolutely comfortable to full-stack TypeScript developers.
MIT License
1.9k stars 203 forks source link

协议目录是否可以多个?在组网时,部分协议只想在服务之前共享,不和客户端共享 #28

Closed themoonbear closed 2 years ago

themoonbear commented 2 years ago

准确的说应该是服务协议文件是否可以多个,不把所有协议编到一个文件里

k8w commented 2 years ago

可以,在 tsrpc.config.ts 中配置多个 proto 项即可。 每个 proto 项还可以配置 ignore 属性来忽略指定协议。

themoonbear commented 2 years ago

可以,在 tsrpc.config.ts 中配置多个 proto 项即可。 每个 proto 项还可以配置 ignore 属性来忽略指定协议。

如果是分开配置proto文件的话,是不是就生成多个服务文件,这样一个server是不是就要针对不同的服务文件起多个服务?如果使用ignore的配置是不是服务文件里还是包含这个协议的,但执行同步的时候会忽略掉这个文件?另外配ignore是填文件名还是协议名?文件名的话需要填写路径吗?可以在案例中加个example吗?

k8w commented 2 years ago

@themoonbear 参考:

export default <TsrpcConfig>{
    // Generate ServiceProto
    proto: [
        {
            ptlDir: 'src/shared/protocols', // Protocol dir
            output: 'src/shared/protocols/serviceProto.ts', // Path for generated ServiceProto
            apiDir: 'src/api',   // API dir
            docDir: 'docs',     // API documents dir
            ptlTemplate: { baseFile: 'src/shared/protocols/base.ts' }
        },
        {
            ptlDir: 'src/shared/protocols', // Protocol dir
            output: 'src/shared/protocols/serviceProto_partial.ts', // Path for generated ServiceProto
            ignore: ['src/shared/protocols/admin/**'],
            // 填写改字段,确保子 proto 与总 proto 兼容
            compatible: 'src/shared/protocols/serviceProto.ts'
        },

    ],
    // ...
}
themoonbear commented 2 years ago

@themoonbear 参考:

export default <TsrpcConfig>{
    // Generate ServiceProto
    proto: [
        {
            ptlDir: 'src/shared/protocols', // Protocol dir
            output: 'src/shared/protocols/serviceProto.ts', // Path for generated ServiceProto
            apiDir: 'src/api',   // API dir
            docDir: 'docs',     // API documents dir
            ptlTemplate: { baseFile: 'src/shared/protocols/base.ts' }
        },
        {
            ptlDir: 'src/shared/protocols', // Protocol dir
            output: 'src/shared/protocols/serviceProto_partial.ts', // Path for generated ServiceProto
            ignore: ['src/shared/protocols/admin/**'],
            // 填写改字段,确保子 proto 与总 proto 兼容
            compatible: 'src/shared/protocols/serviceProto.ts'
        },

    ],
    // ...
}
  • 只需要一个 Server,实现 serviceProto.ts 主协议
  • 给前端可以共享 serviceProto_partial.ts

协议OK了,在同步的时候,我用的拷贝方式,忽略掉的文件还是会拷贝过去,能否在同步的时候也过滤掉忽略的文件?

k8w commented 2 years ago

能否在同步的时候也过滤掉忽略的文件?

目前不行,需要后续版本优化,给 'copy' 类型的 'sync' 也增加一个 'ignore' 选项。 不过这块也要看看有没有好建议?有没有更优雅的 API 设计方式

themoonbear commented 2 years ago

能否在同步的时候也过滤掉忽略的文件?

目前不行,需要后续版本优化,给 'copy' 类型的 'sync' 也增加一个 'ignore' 选项。 不过这块也要看看有没有好建议?有没有更优雅的 API 设计方式

同步的方式,软链感觉比较适合个人开发,不太适用团队开发,还有dev的配置目前只支持一个入口,如果多个服务的话,就用不了,只能像案例里那样用package来处理

k8w commented 2 years ago

dev 可以通过 tsrpc-cli dev --entry xxx.ts 来改变入口

themoonbear commented 2 years ago

dev 可以通过 tsrpc-cli dev --entry xxx.ts 来改变入口

是的,我说就是目前用这种方式来处理多个服务,但如果在tsrpc的配置文件里,对dev这个分段做多入口处理会好些,不然这个分段在多服务的时候就用不上了。

k8w commented 2 years ago

也可以拆分为多个 config 文件:tsrpc-cli dev --config xxx.config.ts