golang 網路框架之 thrift
thrift 最初是 facebook 開發使用的 rpc 通訊框架,後來貢獻給了 apache 基金會,出來得比較早,幾乎支援所有的後端語言,使用非常廣泛,是不可不知的一個網路框架
和 grpc 一樣,需要先定義通訊協議,然後實現自己業務邏輯,下面還是通過一個簡單示例(之前的 echo 程式)說明 thrift 的用法,下面示例使用的完整程式碼在下列地址: 實現檔案:<https://github.com/hatlonely/hellogolang/tree/master/cmd/thrift> 協議檔案:<https://github.com/hatlonely/hellogolang/tree/master/api/echo_thrift>
簡單 echo 服務
獲取 thrift
go get git.apache.org/thrift.git/lib/go
定義協議檔案
namespace go echo
struct EchoReq {
1: string msg;
}
struct EchoRes {
1: string msg;
}
service Echo {
EchoRes echo(1: EchoReq req);
}
執行 thrift -r --gen go echo.thrift
命令會生成 gen-go
資料夾,這個過程其實是將上面的協議翻譯成 golang 程式碼
這個命令依賴於 thrift 工具,可以通過下面命令獲取
Mac
brew install thrift
Linux
wget http://www-us.apache.org/dist/thrift/0.11.0/thrift-0.11.0.tar.gz
tar -xzvf thrift-0.11.0.tar.gz
cd thrift-0.11.0
./configure
make -j8
[sudo] make install
實現服務端
type EchoServerImp struct {
}
func (e *EchoServerImp) Echo(ctx context.Context, req *echo.EchoReq) (*echo.EchoRes, error) {
fmt.Printf("message from client: %v\n", req.GetMsg())
res := &echo.EchoRes{
Msg: req.GetMsg(),
}
return res, nil
}
func main() {
transport, err := thrift.NewTServerSocket(":3000")
if err != nil {
panic(err)
}
processor := echo.NewEchoProcessor(&EchoServerImp{})
server := thrift.NewTSimpleServer4(
processor,
transport,
thrift.NewTBufferedTransportFactory(8192),
thrift.NewTCompactProtocolFactory(),
)
if err := server.Serve(); err != nil {
panic(err)
}
}
這個過程和 grpc 類似,不同的地方在於,thrift 支援更多的伺服器型別,支援不同的協議打包方式,方便使用者選擇,這裡的 compact 協議是一種壓縮的協議,使用比較多
實現客戶端
func main() {
var transport thrift.TTransport
var err error
transport, err = thrift.NewTSocket("localhost:3000")
if err != nil {
fmt.Errorf("NewTSocket failed. err: [%v]\n", err)
return
}
transport, err = thrift.NewTBufferedTransportFactory(8192).GetTransport(transport)
if err != nil {
fmt.Errorf("NewTransport failed. err: [%v]\n", err)
return
}
defer transport.Close()
if err := transport.Open(); err != nil {
fmt.Errorf("Transport.Open failed. err: [%v]\n", err)
return
}
protocolFactory := thrift.NewTCompactProtocolFactory()
iprot := protocolFactory.GetProtocol(transport)
oprot := protocolFactory.GetProtocol(transport)
client := echo.NewEchoClient(thrift.NewTStandardClient(iprot, oprot))
var res *echo.EchoRes
res, err = client.Echo(context.Background(), &echo.EchoReq{
Msg: strings.Join(os.Args[1:], " "),
})
if err != nil {
fmt.Errorf("client echo failed. err: [%v]", err)
return
}
fmt.Printf("message from server: %v", res.GetMsg())
}
這個 client 相對複雜一些,需要和 server 端設定一致的打包方式,如果不一致會出現通訊失敗,這一點需要特別注意一下
參考連結
- thrift go 官網: <http://thrift.apache.org/tutorial/go>
- thrift github: <https://github.com/apache/thrift/>
- thrift go tutorial: <https://github.com/apache/thrift/tree/master/tutorial/go/src>
> 轉載請註明出處 > 本文連結:<http://hatlonely.github.io/2018/02/04/golang-%E7%BD%91%E7%BB%9C%E6%A1%86%E6%9E%B6%E4%B9%8B-thrift/>
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- golang 網路框架之 grpcGolang框架RPC
- RPC框架實踐之:Apache ThriftRPC框架Apache
- Thrift的網路堆疊
- Golang 網路爬蟲框架gocolly/collyGolang爬蟲框架
- rpc框架之thrift連線池實現RPC框架
- 網路通訊協議自動轉換之thrift到http協議HTTP
- golang orm 框架之 gormGolangORM框架
- C#使用Thrift作為RPC框架實戰(四)之TSocketC#RPC框架
- golang web框架,golang版本laravel 框架GolangWeb框架Laravel
- Thrift之Protocol原始碼分析Protocol原始碼
- golang restful 框架之 go-swaggerGolangREST框架Swagger
- 教你寫Android網路框架之基本架構Android框架架構
- 網路請求框架之Retrofit2.0基本講解框架
- 釋出個 golang 高效能非同步網路框架 nbio,單機百萬不是夢!Golang非同步框架
- RxJava練武場之——基於Observable網路框架的搭建RxJava框架
- Android 網路框架之OKhttp實現https請求Android框架HTTP
- Golang框架beego電影網爬蟲小試牛刀Golang框架爬蟲
- CSharp使用Thrift作為RPC框架入門(一)CSharpRPC框架
- iOS-TCP網路框架iOSTCP框架
- 網路框架分析 – 全是套路框架
- Retrofit網路框架介紹框架
- Thrift示例
- 北京知名網際網路公司招聘golang工程師Golang工程師
- 【J+】移動網際網路沙龍——IM與GolangGolang
- 神經網路:numpy實現神經網路框架神經網路框架
- Golang、Php、Python、Java基於Thrift0.9.1實現跨語言呼叫GolangPHPPythonJava
- Thrift RPC 系列教程(1)——Thrift語言RPC
- 配置Retrofit網路框架及其使用框架
- 網路請求框架對比框架
- RxJava練武場之——Observable網路框架的解耦和複用RxJava框架解耦
- 深圳網際網路公司招聘golang後端工程師Golang後端工程師
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- 計算機網路之網路層計算機網路
- ImportError: No module named thrift.Thrift問題解決ImportError
- thrift安裝
- Thrift c#C#
- 效能工具之Jmeter壓測Thrift RPC服務JMeterRPC