Jack Jiang

我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
posts - 41, comments - 12, trackbacks - 0, articles - 0

     摘要: 本系列文章引用了腾讯技术专家樊华恒《海量之道系列文章之弱联网优化》的部分章节,感谢原作者。1、前言随着移动互联网的高速发展,移动端IM以移动网络作为物理通信载体早已深入人心,这其中的成功者就包括微信、手机QQ、支付宝(从即时通讯产品的角度来看,支付宝已经算的上是半个IM了)等等,也为移动端即时通讯开发者带来了各种可以参考的标杆功能和理念:语音对讲、具有移动端体验特性的图片消息、全时在线的概念、真正...  阅读全文

posted @ 2018-05-11 13:19 Jack Jiang 阅读(297) | 评论 (0)编辑 收藏

     摘要: 本文引用了作者Smily(博客:blog.csdn.net/qq_20521573)的文章内容,感谢无私分享。1、前言目前苹果公司已经强制iOS应用必须使用HTTPS协议开发(详见《苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?》),虽然Google没有强制开发者使用HTTPS,但相信不久的将来Android也会跟随iOS全面转向HTTPS。因此,HTTPS的学习也是相当重要。本...  阅读全文

posted @ 2018-05-07 11:47 Jack Jiang 阅读(466) | 评论 (0)编辑 收藏

     摘要: 1、前言微信朋友圈包括图片和视频两套业务架构组成,朋友圈图片的特点是请求量大、消耗计算资源较多,视频则主要消耗带宽。朋友圈的数据是永远存储的,而且随着业务的快速发展,存储容量、带宽和设备的消耗大量增加,尤其重大节日带来的使用量增长,更加剧了消耗,也给运维人员的保障带来了巨大压力。在重在节假日节点,技术保障主要由三方面组成:1)软件保障指通过程序、业务逻辑层面的优化和评估,减轻负载;2)硬件保障主要...  阅读全文

posted @ 2018-05-04 18:14 Jack Jiang 阅读(405) | 评论 (0)编辑 收藏

     摘要: 1、前言2017 年 12 月,微信小程序向开发者开放了实时音视频能力,给业内带来广阔的想象空间。连麦互动视频直播技术在 2016 年直播风口中成为视频直播的标配,然而只有在原生的 APP 上才能保障良好的用户体验。那时候,在微信小程序中无法进行实时音视频互动。微信小程序在去年 12 月宣布开放实时音视频能力,再加上去年 6 月苹果宣布即将支持 WebRTC,业内一下子千树万树梨花开,前途一片光明...  阅读全文

posted @ 2018-05-02 11:10 Jack Jiang 阅读(390) | 评论 (0)编辑 收藏

     摘要: 1、前言每年年初腾讯公司都要制定 SNG 成本优化年度目标,过去三年已经用技术手段为公司节省了超过 10 亿的现金流。产品的架构和容量也越来越健康,继续成本优化变得十分艰难。但我们在迷茫中仍然定下了再优化 3 亿元的目标。很幸运,2017 年我们实现了这个目标,并再次获得公司级奖励,这是非常不容易的。因为“成本与质量”是个平衡木,而 2017 年 SNG 产品面临着激烈的内...  阅读全文

posted @ 2018-04-28 10:51 Jack Jiang 阅读(406) | 评论 (0)编辑 收藏

     摘要: 本文来自微信开发团队WeMobileDev公众号的技术分享。1、前言微信的移动客户端全文搜索中的多音字问题一直是搜索体验的痛点之一。微信客户端全文搜索在上线以后,也经常收到用户关于多音字问题的反馈。所以,微信全文搜索中的多音字搜索成了一个迫切需要解决的问题。本文重点讲述微信安卓客户端在SQLite FTS5的基础上,多音字问题的解决方案。另外:微信团队在另一个文章《微信手机端的本地数据全文检索优化...  阅读全文

posted @ 2018-04-17 16:36 Jack Jiang 阅读(361) | 评论 (0)编辑 收藏

本文作者:丁同舟,来自金蝶随手记技术团队。

1、前言

本文接上篇《金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)》,以iOS端的Objective-C代码为例,向您演示如何使用Protobuf。

学习交流:

- 即时通讯开发交流群:320837163[推荐]

- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

(本文同步发布于:http://www.52im.net/thread-1515-1-1.html

2、系列文章

本文是系列文章中的第2篇,总目录如下:

金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)

金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(实战篇)》(本文)

另外,如果您还打算系统地了解IM的开发知识,可以阅读《新手入门一篇就够:从零开发移动端IM》。

3、参考资料

Protobuf通信协议详解:代码演示、详细原理介绍等

一个基于Protocol Buffer的Java代码演示

如何选择即时通讯应用的数据传输格式

强列建议将Protobuf作为你的即时通讯应用数据传输格式

全方位评测:Protobuf性能到底有没有比JSON快5倍?

移动端IM开发需要面对的技术问题(含通信协议选择)

简述移动端IM开发的那些坑:架构设计、通信协议和客户端

理论联系实际:一套典型的IM通信协议设计详解

详解如何在NodeJS中使用Google的Protobuf

>> 更多同类文章 ……

4、基本介绍

Protocol buffers为 Google 提出的一种跨平台、多语言支持且开源的序列化数据格式。相对于类似的 XML 和 JSON,Protocol buffers 更为小巧、快速和简单。其语法目前分为proto2和proto3两种格式。

目前 Google 官方的 Protobuf最新 release 版本为3.5.1,以下都是基于此版本的环境搭建。

关于 Protocol Buffer 的使用可以查阅官方文档:https://developers.google.com/protocol-buffers/docs/overview

5、准备工作

5.1 环境要求

Objective-C 2.0 Runtime (32bit & 64bit iOS, 64bit OS X)

Xcode 7.0+

注意:

Protobuf 出于性能考虑没有使用 ARC,但在 ARC 下是可以使用的。

5.2 安装

下载 Protobuf 代码包(https://github.com/google/protobuf/releases),这里选择 protobuf-objectivec-3.5.1.tar.gz。

5.3 解压代码包

编译 Protobuf,这里可能需要安装部分工具:

$ brew install autoconf

$ brew install automake

$ brew install libtool

运行下面脚本进行编译:

$ ./autogen.sh

$ ./configure

$ make

$ makeinstall

检查protobuf是否安装成功:

$ protoc --version

如果成功打印版本号则安装成功:

libprotoc 3.5.1

6、在 iOS 中使用 Protobuf

6.1 创建.proto文件

这里使用官方文档上的一份示例数据结构创建Person.proto:

syntax = "proto3";

message Person {

  string name = 1;

  int32 id = 2;

  string email = 3;

  enumPhoneType {

    MOBILE = 0;

    HOME = 1;

    WORK = 2;

  }

  message PhoneNumber {

    string number = 1;

    PhoneType type = 2;

  }

  repeated PhoneNumber phone = 4;

}

使用命令行编译Person.proto为objective-c的文件,编译出来的文件为Person.pbobjc.h和Person.pbobjc.m:

protoc Person.proto --objc_out=./

6.2 引入 Protobuf 运行时资源

Google 官方的文档提供了两种引入方式,但使用第一种的时候编译不能通过,所以这里选择了第二种:

复制protobuf目录下的:objectivec/*.h, objectivec/google/protobuf/*.pbobjc.h, objectivec/google/protobuf/*.pbobjc.m, 以及除去objectivec/GPBProtocolBuffers.m后的objectivec/*.m。

这里直接用命令行操作,首先进入protobuf下objectivec的目录:

$ cdprotobuf-3.5.1/objectivec

然后复制符合规则的文件到指定的工程目录下:

$mkdir~/ProtobufDemo/ProtocolBuffers~/ProtobufDemo/ProtocolBuffers/google~/ProtobufDemo/ProtocolBuffers/google/protobuf

$ cp*.h *.m ~/ProtobufDemo/ProtocolBuffers

$ cpgoogle/protobuf/*.pbobjc.h google/protobuf/*.pbobjc.m ~/ProtobufDemo/ProtocolBuffers/google/protobuf

注意:

上面的命令并没有排除 GPBProtocolBuffers.m 文件,引入时需要手动排除。

现在把ProtocolBuffers目录下所有文件以及上面编译出来的Person.pbobjc.h和Person.pbobjc.m都引入到工程中。

现在工程目录结构大概是长这样:

需要注意,由于protobuf没有使用 ARC,因此需要为所有.m文件加上-fno-objc-arc来关闭 ARC:

注意:

需要注意工程中的 Header Search Paths 要增加 $(PROJECT_DIR)/ProtocolBuffers(具体的路径视情况而定)

6.3 直接引入 ProtocolBuffers 工程

如果觉得手动引入文件的方式过于复杂,可以直接引入ProtocolBuffers工程作为依赖项:

1)进入解压后的protobuf目录下,复制objective目录下的所有文件到ProtobufDemo/ProtocolBuffers目录下;

2)在ProtobufDemo工程中引入ProtocolBuffers_iOS工程:

3)在Build Phases中加入依赖关系并链接库:

4)引入Person.pbobjc.h和Person.pbobjc.m文件并为.m加上-fno-objc-arc;

5)修改工程配置中部分路径为 $(PROJECT_DIR)/ProtocolBuffers。

6.4 运行测试

首先引入头文件:

#import "Person.pbobjc.h"

生成Person对象并进行编码和解码:

Person *p = [[Person alloc] init];

p.id_p = 1;

p.name = @"person1";

p.email = @"123@qq.com";


//encode

NSData*data = [p data];

NSLog(@"Protocol Buffers:\n%@\nData: %@\nData Length: %lu", p, data, data.length);


//decode

Person *newP = [[Person alloc] initWithData:data error:nil];

NSLog(@"Decoded: %@", newP);

运行程序,打印日志如下:

Protocol Buffers:

: {

    name: "person1"

    id: 1

    email: "123@qq.com"

}

Data: <0a077065 72736f6e 3110011a 0a313233 4071712e 636f6d>

Data Length: 23

Decoded: : {

    name: "person1"

    id: 1

    email: "123@qq.com"

}

Coffee time!

(本文同步发布于:http://www.52im.net/thread-1515-1-1.html

posted @ 2018-04-03 11:28 Jack Jiang 阅读(519) | 评论 (0)编辑 收藏

     摘要: 本文作者:丁同舟,转载自“随手记技术团队”微信公众号。1、前言跟移动端IM中追求数据传输效率、网络流量消耗等需求一样,随手记客户端与服务端交互的过程中,对部分数据的传输大小和效率也有较高的要求,普通的数据格式如 JSON 或者 XML 已经不能满足,因此决定采用 Google 推出的 Protocol Buffers 以达到数据高效传输。(本文同步发布于:http://ww...  阅读全文

posted @ 2018-04-02 12:23 Jack Jiang 阅读(437) | 评论 (0)编辑 收藏

     摘要: 1、长连接在iOS开发中的应用常见的短连接应用场景:一般的App的网络请求都是基于Http1.0进行的,使用的是NSURLConnection、NSURLSession或者是AFNetworking,Http1.0链接最显著的特点就是客户端每一次需要主动向服务端发送请求,都需要经历建立链接、发送请求、返回数据、关闭链接这几个阶段,是一种单向请求且无状态的协议。长连接的应用场景:有的时候,我们需要服...  阅读全文

posted @ 2018-03-26 11:53 Jack Jiang 阅读(399) | 评论 (0)编辑 收藏

     摘要: 1、前言IM App 是我做过 App 类型里复杂度最高的一类,里面可供深究探讨的技术难点非常之多。这篇文章和大家聊下从移动端客户端的角度所关注的IM消息可靠性和送达机制(因为我个人对移动客户端的经验积累的比较丰富嘛)。学习交流:- 即时通讯开发交流群:320837163[推荐]- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》(本文同步发布于:http://www.52im.n...  阅读全文

posted @ 2018-03-19 14:52 Jack Jiang 阅读(347) | 评论 (0)编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5 下一页 
Jack Jiang的 Mail: jb2011@163.com, 联系QQ: 413980957, 微信: hellojackjiang