ProtoBuf 中关于 proto 文件的组织方式的疑问?

查看 54|回复 2
作者:liuguangxuan   
背景:
在开发 C/S 程序的时候,使用 ProtoBuf 作为服务端和客户端的通信协议,比如要开发一款软件,包括服务端和客户端,其中服务端仅有 1 个,但是客户端有多种,且客户端为不同的团队开发维护,在组织 proto 的时候,假如按照不同团队使用的 proto 按照文件夹分类,如下所示:
.
├── Administrator
│   └── admin.proto
├── CommonUser
│   └── user.proto
├── OtherUser
│   └── other.proto
└── Msg.proto
其中Msg.proto为一个大的结构体,在里面区分不同的客户端,如下所示:
message Msg {
    int32 ClientType = 1;
    optional Administrator admin = 2;
    optional CommonUser user = 3;
    optional OtherUser other = 4;
}
疑问:
这样组织 proto 文件,服务端需要维护一份完整的 proto ,没有什么问题。
但是每个客户端都能看到完整的 proto 文件,如 CommonUser 也需要看到 Administrator 文件夹下的 proto ,否则用 protoc 生成 cpp 文件的时候会因为缺少 proto 文件无法生成。
请教各位老哥,像上述使用场景,服务端需要面对多个客户端(或者多种角色),不同客户端之间有共用的 proto ,也有各自的 proto ,这种应该怎么组织才合理?
隔离 proto 原因:
因为不同的客户端,他们的接口不一样,涉及到的接口权限不一样,所以不想让不同的客户端团队看到其他人的 proto ,才想着隔离 proto 。

proto, 客户端, oto, commonuser

3dwelcome   
在 protoc 上面简单包个脚本,先调用一下预编译,就搞定了,
比如
message Msg {
int32 ClientType = 1;
#ifdef USER1
optional Administrator admin = 2;
#endif
#ifdef USER2
optional CommonUser user = 3;
#endif
optional OtherUser other = 4;
}
leonshaw   
用 Any ?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部