Kitex 編解碼協(xié)議

2022-04-26 14:21 更新

編解碼協(xié)議

目前,Kitex 支持了 thrift 和 protobuf 兩種編解碼協(xié)議。

Thrift

Kitex 支持了 Thrift 的 Binary 協(xié)議,暫時沒有支持 Compact 協(xié)議。

生成代碼時指定 thrift 協(xié)議,也可以不指定,默認(rèn)就是 thrift:

  • 客戶端

kitex -type thrift ${service_name} ${idl_name}.thrift

  • 服務(wù)端

kitex -type thrift -service ${service_name} ${idl_name}.thrift

我們針對 thrift 的 binary 協(xié)議編解碼進(jìn)行了優(yōu)化,具體優(yōu)化細(xì)節(jié)參考 “Reference - 高性能 Thrift 編解碼 " 篇章,假如想要關(guān)閉這些優(yōu)化,生成代碼時可以加上 ?-no-fast-api? 參數(shù)。

Protobuf

協(xié)議說明

Kitex 對 protobuf 支持的協(xié)議有兩種:

  1. 自定義的消息協(xié)議,可以理解為 Kitex Protobuf,使用方式與 thrift 一樣
  2. gRPC 協(xié)議,可以與 gRPC 互通,并且支持 streaming 調(diào)用

如果 IDL 文件中定義了 streaming 方法則走 gRPC 協(xié)議,否則走 Kitex Protobuf。沒有 streaming 方法,又想指定 gRPC 協(xié)議,需要 client 初始化做如下配置(server 支持協(xié)議探測無需配置) :

// 使用 WithTransportProtocol 指定 transport
cli, err := service.NewClient(destService, client.WithTransportProtocol(transport.GRPC))

生成代碼

只支持 proto3,語法參考 https://developers.google.com/protocol-buffers/docs/gotutorial

注意:

  1. 相較其他語言,必須定義 go_package ,以后 pb 官方也會將此作為必須約束
  2. go_package 和 thrift 的 namespace 定義一樣,不用寫完整的路徑,只需指定包名,相當(dāng)于 thrift 的 namespace,如:go_package = “pbdemo”
  3. 提前下載好 protoc 二進(jìn)制放在 $PATH 目錄下

生成代碼時需要指定 protobuf 協(xié)議:

  • 客戶端

kitex -type protobuf -I idl/ idl/${proto_name}.proto

  • 服務(wù)端

kitex -type protobuf -service ${service_name} -I idl/ idl/${proto_name}.proto


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號