前些天公司有一個需求,基于WebSocket和Protocol Buffer實現(xiàn)即時通訊工具,這期間遇到一些問題缘薛,覺得網(wǎng)上的資料不是特別的詳細(xì),或者不是很好理解卡睦,所以在這里總結(jié)一下宴胧。先附上demo地址https://github.com/WJSugar/Chat,大佬如果覺得有幫助小手一抖給個星表锻,發(fā)現(xiàn)錯誤恕齐,請在留言嚴(yán)厲批評。
綜述
所謂基于WebSocket和Protocol Buffer實現(xiàn)即時通訊工具瞬逊,其實沒有很復(fù)雜显歧,WebSocket用來建立長連接,Protocol Buffer是傳輸消息的協(xié)議确镊。倘若你們公司要使用這種方式實現(xiàn)及時通信士骤,你的后臺會在服務(wù)器上部署好聊天服務(wù)器,并且給你一個.proto文件骚腥,我們iOS端需要在本地利用谷歌提供的工具生成.pbobjc.h和.pbobjc.m文件敦间,生成過程在后面文章中,這個可以看做聊天的消息實體束铭,例如廓块,后臺給你的是ChatMsg.proto,我們需要生成只有的文件名稱為ChatMsg.pbobjc.h和ChatMsg.pbobjc.m契沫,不要問我為什么是這樣的带猴,因為我也不知道啊。生成的這個ChatMsg就是我們以后的利用scoket收發(fā)消息的協(xié)議的具體實現(xiàn)懈万,以后的登錄拴清、新建聊天分組、獲取聊天分組等操作都是生成ChatMsg對象并配置相應(yīng)的參數(shù)会通,即可實現(xiàn)口予。
生成實體消息實體類
一步一步來,聽指揮涕侈,打勝仗沪停,這部分的操作是搭建編譯環(huán)境,后臺給你的.proto需要通過該編譯才能生成.h和.m這對文件裳涛,所以我們首先需要做的是搭建編譯環(huán)境
1.安裝HOMEBREW木张,如果已經(jīng)安裝過了就直接跳過這一步,如果沒有安裝過直接在終端執(zhí)行? /usr/bin/ruby-e"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2.去git下載Protol Buffer安裝包https://github.com/google/protobuf/releases端三,詢問后臺使用的版本舷礼,下載tar.gz,并解壓郊闯,這里以當(dāng)期最新版本為例3.5.1版本妻献。
3.打開終端并輸入,brew install autoconf automake libtool curl
4.在終端团赁,cd拖入protobuf-objectivec-3.5.1文件
5.輸入./autogen.sh,運行腳本旋奢,如果很長時間終端沒有反應(yīng)或者報錯,那說明需要翻? 越 長 城了
6.輸入./configure,運行腳本
7.輸入make,編譯
8.輸入make check,檢查依賴包是否完整然痊,終端會輸出7個檢查項至朗,都顯示pass就說明是沒有問題的
9.輸入make install,安裝PB
10.輸入proto --version輸出版本信息剧浸,并沒有其他錯誤提示锹引,就說明已經(jīng)安裝完畢啦。
下面要做的才是真正的生成消息實體文件
1.新建一個文件夾唆香,將后臺給你的.proto拷到文件夾嫌变,cd到這個文件夾
2.在終端輸入touch ChatMsg.proto命令,后臺給你的文件是啥你就輸入啥 touch 你的文件的名城.proto
3.在終端輸入protoc --plugin=/usr/local/bin/protoc-gen-objc ChatMsg.proto --objc_out="./"躬它,這里也要注意將ChatMsg替換為你的文件名稱腾啥,如果提示無其他的異常,文件夾就會有生成的.h和.m文件
4.將生成的文件拖入到你的項目中,在工程target->Build Phrases->Compile Sources->給ChatMsg.pbobjc.m設(shè)置-fno-objc-arc倘待,完畢就可以使用啦疮跑。
在項目中集成
1.在上面protobuf-objectivec-3.5.1.tar.gz解壓包里面,有一個objectivec文件夾凸舵,將這個文件夾復(fù)制到項目中祖娘,在項目中右鍵Add Files to xxx 選中這個文件夾,選擇文件夾中的ProtocolBuffers_iOS.xcodeproj添加到文件中啊奄。
2.在工程target->Build Phrases->Compile Sources->Link Binary With Libraries添加libTestSingleSourceBuild.a靜態(tài)庫
3.在工程target->Build Settings->?Rez Search Path?設(shè)置$(PROJECT)/objectivec渐苏,注意是objectivec是我存放ProtocolBuffers_iOS.xcodeproj的文件夾名字,根據(jù)你自己的文件夾名稱進(jìn)行配置$(PROJECT)/你的文件夾名稱
4.在工程target->Build Settings->?Header Search Paths?設(shè)置$(PROJECT)/objectivec菇夸,注意是objectivec是我存放ProtocolBuffers_iOS.xcodeproj的文件夾名字琼富,根據(jù)你自己的文件夾名稱進(jìn)行配置$(PROJECT)/你的文件夾名稱
編譯程序,順利通過編譯即可庄新。如果出現(xiàn)'GPBProtocolBuffers_RuntimeSupport.h' file not found'等文件找不到的問題鞠眉?重復(fù)“在項目中集成”步驟。