iOS中protobuf和tcp长链接(AsyncSocket)scoket配合使用

在ios开发中,客户端开发最重要的就是数据的获取和展示了,说到获取数据,AFN是目前用的最广的类库了吧,不过在实时数据tcp获取上面,我们还是需要用到AsyncSocket这个类库来进行开发。不过近日听过网上google的一个protobuf协议十分好用,就研究了一下。
AsyncSocket的下载和引用以及protobuf的安装和使用都在之前的博客中讲过,不懂的同学可以去稍稍看一下。
接着我们直接讲一下两者结合的使用。
首先我们需要定义protobuf的协议文档:我们把tcp传输的数据分为两部分:数据头+数据
我们就定义数据头为24个字节(当然这个是我们需要和服务器人员商量好决定的)如图

这里写图片描述
这里写图片描述

这里的包头24个字节里面就包含了对于当前一个完整的数据的一个解释。也就是每一个完整的数据,都是由一个包头和具体数据来组成的。(当然这里面会出现粘包状况,这个我在后面会讲)

了解完这些之后,下面我们开始具体实现
比如我们想通过tcp来对一个机器人进行一些控制命令操作并受到机器人的数据回复
1:定义好一个jiqiren.proto的文件,内容属性如下

//单条消息,给下面使用
message Message_info_single
{
    required string time=1;              //机器人返回响应时间
    required string event_content=2;     //机器人返回响应内容
    required string nickname=3;          //机器人的名字
    required string headpic=4;           //机器人头像
}
//command_id:1001 操作机器人的命令标示
message Control_c
{
    required string u_id=1;      //机器人的id
    required int32 c=2;          //控制命令:1: 握手, 2: 问好, 3: 唱歌,
}
//command_id:2002 机器人返回数据的命令标示
message Messages_s
{
    required string u_id=1;              //机器人id
    repeated Message_info_single message_info=2; //机器人返回的内容
}

关于.proto书写格式,大家可以去网上搜一下,这里就不介绍了。
协议定好之后,我们根据jiqiren.proto这个文件,生成一个jiqiren.pb.m和jiqiren.pb.h文件。它们两个就相当于帮我们封装好的一个类,里面又根据.proto文件里面的数据帮我们封装了很多个模型。
服务器那边给我们传过来一个protocolbuffer类型的数据我们就需要根据这个进行解析,当我们需要向服务器发送一些数据时,我们也封装成protocolbuffer类型,然后通过tcp传给服务器。它就相当于客户端和服务器沟通的一个公用桥梁,就像json数据一样,我们给服务器json数据,服务器接受之后解析成他们需要的数据来操作,然后服务器给我们数据时,也封装成json数据,给我们之后,我们解析成我们需要的数据进行展示。只不过现在个人认为这个protocolbuffer比json要强很多。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值