當前位置:
首頁 > 最新 > Netty-整合Protobuf高性能數據傳輸

Netty-整合Protobuf高性能數據傳輸

前言

本篇文章是Netty專題的第四篇,前面三篇文章如下:

上篇文章我們整合了kryo來進行數據的傳輸編解碼,今天將繼續學習使用Protobuf來編解碼。Netty對Protobuf的支持比較好,還提供了Protobuf的編解碼器,非常方便。


Protobuf介紹

GitHub地址:https://github.com/google/protobuf

Protobuf是google開源的項目,全稱 Google Protocol Buffers,特點如下:

支持跨平台多語言,支持目前絕大多數語言例如C++、C#、Java、pthyon等

高性能,可靠性高,google出品有保障

使用protobuf編譯器能自動生成代碼,但需要編寫proto文件,需要一點學習成本

Protobuf是將類的定義使用.proto文件進行描述,然後通過protoc.exe編譯器,根據.proto自動生成.java文件,然後將生成的.java文件拷貝到項目中使用即可。

在Github主頁我們下周Windows下的編譯器,可以在releases頁面下載:https://github.com/google/protobuf/releases

protoc.exe編譯器下載

下載完成之後放到磁碟上進行解壓,可以將protoc.exe配置到環境變數中去,這樣就可以直接在cmd命令行中使用protoc命令,也可以不用配置,直接到解壓後的protocin目錄下進行文件的編譯。

下面我們基於之前的Message對象來構建一個Message.proto文件。

syntax 聲明可以選擇protobuf的編譯器版本(v2和v3)

syntax="proto2";選擇2版本

syntax="proto3";選擇3版本

option java_outer_classname="MessageProto"用來指定生成的java類的類名。

message相當於c語言中的struct語句,表示定義一個信息,其實也就是類。

message裡面的信息就是我們要傳輸的欄位了,子段後面需要有一個數字編號,從1開始遞增

.proto文件定好之後就可以用編譯器進行編譯,輸出我們要使用的Java類,我們這邊不配置環境變數,直接到解壓包的bin目錄下進行操作

首先將我們的Message.proto文件複製到bin目錄下,然後在這個目錄下打開CMD窗口,輸入下面的命令進行編譯操作:

--java_out是輸出目錄,我們就輸出到當前目錄下,執行完之後可以看到bin目錄下多了一個MessageProto.java文件,把這個文件複製到項目中使用即可。


首先加入Protobuf的Maven依賴:

創建一個Proto的Server數據處理類,之前的已經不能用了,因為現在傳輸的對象是MessageProto這個對象。

改造服務端啟動代碼,增加protobuf編解碼器,是Netty自帶的,不用我們去自定義。

服務端改造完了,下面需要把客戶的的Handler和編解碼器也改成protobuf的就行了,廢話不多說,直接上代碼:

客戶的數據處理類:

最後一步就開始測試了,需要將客戶的發送消息的地方改成MessageProto.Message對象,代碼如下:

源碼參考:https://github.com/yinjihuan/netty-im


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 猿天地 的精彩文章:

TAG:猿天地 |