前些天公司有一个需求,基于WebSocket和Protocol Buffer实现即时通讯工具,这期间遇到一些问题,觉得网上的资料不是特别的详细,或者不是很好理解,所以在这里总结一下。先附上demo地址https://github.com/WJSugar/Chat,大佬如果觉得有帮助小手一抖给个星,发现错误,请在留言严厉批评。
综述
所谓基于WebSocket和Protocol Buffer实现即时通讯工具,其实没有很复杂,WebSocket用来建立长连接,Protocol Buffer是传输消息的协议。倘若你们公司要使用这种方式实现及时通信,你的后台会在服务器上部署好聊天服务器,并且给你一个.proto文件,我们iOS端需要在本地利用谷歌提供的工具生成.pbobjc.h和.pbobjc.m文件,生成过程在后面文章中,这个可以看做聊天的消息实体,例如,后台给你的是ChatMsg.proto,我们需要生成只有的文件名称为ChatMsg.pbobjc.h和ChatMsg.pbobjc.m,不要问我为什么是这样的,因为我也不知道啊。生成的这个ChatMsg就是我们以后的利用scoket收发消息的协议的具体实现,以后的登录、新建聊天分组、获取聊天分组等操作都是生成ChatMsg对象并配置相应的参数,即可实现。
生成实体消息实体类
一步一步来,听指挥,打胜仗,这部分的操作是搭建编译环境,后台给你的.proto需要通过该编译才能生成.h和.m这对文件,所以我们首先需要做的是搭建编译环境
1.安装HOMEBREW,如果已经安装过了就直接跳过这一步,如果没有安装过直接在终端执行 /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,并解压,这里以当期最新版本为例3.5.1版本。
3.打开终端并输入,brew install autoconf automake libtool curl
4.在终端,cd拖入protobuf-objectivec-3.5.1文件
5.输入./autogen.sh,运行脚本,如果很长时间终端没有反应或者报错,那说明需要翻 越 长 城了
6.输入./configure,运行脚本
7.输入make,编译
8.输入make check,检查依赖包是否完整,终端会输出7个检查项,都显示pass就说明是没有问题的
9.输入make install,安装PB
10.输入proto --version输出版本信息,并没有其他错误提示,就说明已经安装完毕啦。
下面要做的才是真正的生成消息实体文件
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设置-fno-objc-arc,完毕就可以使用啦。
在项目中集成
1.在上面protobuf-objectivec-3.5.1.tar.gz解压包里面,有一个objectivec文件夹,将这个文件夹复制到项目中,在项目中右键Add Files to xxx 选中这个文件夹,选择文件夹中的ProtocolBuffers_iOS.xcodeproj添加到文件中。
2.在工程target->Build Phrases->Compile Sources->Link Binary With Libraries添加libTestSingleSourceBuild.a静态库
3.在工程target->Build Settings-> Rez Search Path 设置$(PROJECT)/objectivec,注意是objectivec是我存放ProtocolBuffers_iOS.xcodeproj的文件夹名字,根据你自己的文件夹名称进行配置$(PROJECT)/你的文件夹名称
4.在工程target->Build Settings-> Header Search Paths 设置$(PROJECT)/objectivec,注意是objectivec是我存放ProtocolBuffers_iOS.xcodeproj的文件夹名字,根据你自己的文件夹名称进行配置$(PROJECT)/你的文件夹名称
编译程序,顺利通过编译即可。如果出现'GPBProtocolBuffers_RuntimeSupport.h' file not found'等文件找不到的问题?重复“在项目中集成”步骤。