tonic-rpc是一个宏,它从纯Rust服务定义而不是proto文件生成使用的特征和存根。 这意味着您可以在使用本机Rust类型时获得tonic所有,而无需使用proto文件或构建脚本。 当然,这是以与其他语言的互操作性为代价的。 备择方案 是一个出色的RPC库,它还将服务定义为Rust特征。 所需的依赖项 tonic = " 0.4 " 例子 代替定义proto服务,将服务定义为特征: #[tonic_rpc::tonic_rpc(json)] trait Increment { fn increment (arg: i32 ) -> i32 ; } 属性#[tonic_rpc(json)]指示此服务将使用json序列化请求和响应。 每个函数的参数和返回值必须实现serde::Serialize和serde::Deserialize 。 可以通过定义和impl实现该服务