SlideShare a Scribd company logo
1 of 25
Download to read offline
Android
DevCamp




Produced by CSDN


Website:
http://devcamp.csdn.net/
Weibo:
http://weibo.com/cmdnclub/
PC与ANDROID设备间的数
据通信
孙桥,豌豆荚创始团队成员
豌豆荚的手机管理任务
¨    豌豆荚,简单好用的 Android 手机管理软件,管
      理超过 5000w 台 Android手机。

¨    豌豆荚的 Phone Management Protocol (PMP)
      ¤  Google
             Protocol Buffers
      ¤  协议内容
Google Protocol Buffers
¨    Protocol Buffers are a way of encoding structured
      data in an efficient yet extensible format. Google
      uses Protocol Buffers for almost all of its internal
      RPC protocols and file formats.
Google Protocol Buffers
example.proto
message Person {
    required string name = 1;
    required int32 id = 2;
    optional string email = 3;
    enum PhoneType {
         MOBILE = 0;
         HOME = 1;
         WORK = 2;
    };
    message PhoneNumber {
       required string number = 1;
       optional PhoneType type = 2 [default = HOME];
    };
    repeated PhoneNumber phone = 4;
}
Google Protocol Buffers

¨    序列化
public byte[] serialization() {
    ExampleProto.Person.Builder exampleBuilder =
      ExampleProto.Person.newBuilder();


    exampleBuilder.setId(1);
    exampleBuilder.setName("sunqiao");
    exampleBuilder.setEmail("sunqiao@wandoujia.com");
    exampleBuilder.addPhone(PhoneNumber.newBuilder()
       .setType(PhoneType.WORK).setNumber("1861817****").build());

    return exampleBuilder.build().toByteArray();
}
Google Protocol Buffers

¨    反序列化
public ExampleProto.Person deserialization(byte[] personInBytes) {
      ExampleProto.Person person = null;


      try {
         person = ExampleProto.Person.parseFrom(personInBytes);
      } catch (InvalidProtocolBufferException e) {
         e.printStackTrace();
      }


      return person;
  }
Google Protocol Buffers

¨    序列化时间
Google Protocol Buffers

¨    反序列化时间
Google Protocol Buffers

¨    序列化后数据大小
Google Protocol Buffers
¨    内存使用 - toByteArray()
public byte[] toByteArray() {
   try {
     final byte[] result = new byte[getSerializedSize()];
     final CodedOutputStream output = CodedOutputStream.newInstance(result);
     writeTo(output);
     output.checkNoSpaceLeft();
     return result;
   } catch (IOException e) {
     throw new RuntimeException(
       "Serializing to a byte array threw an IOException " +
       "(should never happen).", e);
   }
 }
Google Protocol Buffers
¨    内存使用 – 嵌套
message Parent {
     optional string content_type = 1;
     optional bytes content = 2;
};

message Child1 {
     optional int32 id = 1;
     optional string name = 2;
     optional string des = 3;
};

message Child2 {
     optional string title = 1;
     optional string content = 2;
     optional bytes icon = 3;
};
Google Protocol Buffers
¨  运行库大小
¨  optimize_for

      ¤  SPEED

      ¤  CODE_SIZE

      ¤  LITE_RUNTIME
Google Protocol Buffers
 ¨    运行库大小
Feature                protobuf   Protobuf (lite-runtime) Protobuf-j2me
Runtime library size   420KB      77KB                   22KB
Generated code         100%       73%                    26%
size
Enumerations           YES        YES                    YES
Unknown fields         YES        YES                    NO
Immutability           YES        YES                    NO
Groups                 YES        YES                    NO
Reflection             YES        NO                     NO
Descriptors            YES        NO                     NO
Phone Management Protocol
¨    消息格式
      ¤  Request
        n  Header
            n  Token,用于标识请求,并且Token中包含安全验证信息
            n  Service Uri,服务地址,pmp://contact/getContacts
            n  Client,发起这次请求的客户端
            n  Content-Range,请求的数据范围

        n  Body
            n    Parameters,参数为键值对
Phone Management Protocol
¨    消息格式
      ¤  Response
        n  Header
            n  Token,用于标识某个请求的响应
            n  Content-Type,用于标识Body中的数据类型
            n  Content-Length,用于标识Body中的数据长度
            n  Content-Range,用于标识Body中包含的数据在整个请求结果
                中的范围
            n  StatusCode,类似与Http 1.1 的 StatusCode

        n  Body
Phone Management Protocol
¨    Content-Type
      ¤  类似于MIMEType,一个字符串对应一个使用
       protobuf定义的类型,作为PMP的类型体系

      vnd.pmp.item/int -> BaseProto.Int
      vnd.pmp.dir/int -> BaseProto.Ints
Phone Management Protocol
¨    Service Uri
      ¤  服务地址,例如     pmp://sms/receive


¨    目前有四种类型的服务
      ¤  普通服务
      ¤  支持 Content-Range 的服务
      ¤  支持 Partial-Return 的服务

      ¤  支持 Keep-Alive 的服务
Phone Management Protocol
  ¨    普通服务
                             Respo
                                    n
                            Head se
                                  er
                            Token
       t                          :
Reques                     Conte 12345**
        r
 Heade 2345***           vnd.p nt-Type: *
          1                    mp
  Token: pmp://sms/       Conte .item/int
           :                    n
   Ser vice unt          Statu t-Length:1
          SCo
  getSM DA_PC_XXX
                   X   Body sCode:20
                                          0
    Client:            1 (pr
                            otobu
   Body                            f seri
                                          alize
                                                d)
Phone Management Protocol
   ¨    支持 Content-Range 的服务
                                             Respo
                                                    n
                                            Head se
                                                  er
       t
Reques                                      Token
                                                  :
        r
 Heade 2345***                             Conte 12345**
          1
  Token: pmp://file/w
                            rite         vnd.p nt-Type: *
                                               mp
            :
   Ser vice _PC_XXXX /1400                Conte .item/int
                                                n
            DA
    Client: Range: 0-10
                            23           Statu t-Length:4
    Conten
              t-                       Body sCode:20
                                tr>                      0
   B ody            .pmp.item/s yte>   1024
                                              (prot
      <pa  th, vnd .pmp.dir/b                       obuf
                 t, vnd                                  seria
       < conten                                               lized
                                                                   )
Phone Management Protocol
   ¨    支持 Partial-Return 的服务                   Respo
                                                          n
                                                Head se
                                                       er
                                                Token
                                                        :
       t                                       Conte 12345**
Reques                                       app nt-Type: v *
        r                                                            nd.pm
 Heade 2345***                                Conte                          p.dir/
          1                list
  Token: pmp://app/                          Statu
                                                     nt-Le
                                                            n
            :
   Ser vice _PC_XXXX                               sCod gth:10204
                                            Conte          e:2
    Client:
            DA                                    nt-Ra 06                              X 30
                                   int>   Body             nge:
   Body                .pm p.item/                                0-9/
              y pe, vnd                   apps                          300
     <appT                                      (prot
                                                       obuf
                                                               seria
                                                                     lized
                                                Conte                      )
                                                       nt-Ty
                                                Conte          pe
                                                         nt-Le : vnd.pmp
                                               Statu            n             .dir/i
                                             Body     sCod gth:4                     nt
                                                             e:200
                                                                     Body
                                              300
                                                    (prot
                                                           obuf
                                                                  seria
                                                                        lized
Phone Management Protocol
     ¨    支持 Keep-Alive 的服务                    Respo
                                                         n
                                               Head se
                                                      er
                                                Token
                                                       :
                                              Conte 12345**
Reques
       t                                   notifi nt-Type: v *
        r                                         cat               nd.pm
 Heade 2345***                    ait       Conte ion                       p.dir/
           1             c ation/w                  nt-Le
  Token: pmp://notifi                      Statu            n
             :                                    sCod gth:1024
   Ser vice _PC_XXXX                      Conte           e:2
             DA                                   nt-Ra 06                          X ttl
    Client:                             Body              nge:
                           nt>                                  0-1/
   Body        .pmp.item/i              notifi
                                               catio
                                                                      ttl
     < ttl, vnd                                      n (pro
                                                              tobuf
                                                                     seria
                                                  Conte                     ..
                                                 Conte nt-Type: v
                                                          n            n
                                                Statu t-Length:4 d.pmp.dir
                                            Body sCode:20                          /int
                                                                    0
                                             ttl (p
                                                   rotob
                                                            uf se
                                                                  rializ
                                                                         ed
Phone Management Protocol
¨    安全性
      ¤  使用Token来验证请求是否非法,Token中包含了安
       全信息(必须是手机授权的客户端才能访问),具
       体算法不详
Phone Management Protocol
¨    兼容性
      ¤  兼容性问题是由于对协议进行升级导致的出现不同的协议版
          本的客户端和服务器端相互请求的问题
      ¤  产生兼容性问题的原因
            n  修改方法接口定义
            n  修改数据结构定义
            n  修改安全验证方式
            n  性能优化,使用了新的序列化/反序列化方法
      ¤    解决方案
            n  不修改删除已有方法,只新增方法
            n  不修改删除已有数据结构字段,只新增新的字段
            n  只有一种安全验证方式
            n  只使用protobuf进行序列化和反序列化
Q&A

More Related Content

Similar to 发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥

Wbm9000动态库说明L
Wbm9000动态库说明LWbm9000动态库说明L
Wbm9000动态库说明Lguest8eab39bd
 
2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享Jen Yee Hong
 
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)永立 連
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的CGoogol Lee
 
P2 p加速分析与设计
P2 p加速分析与设计P2 p加速分析与设计
P2 p加速分析与设计tigerxu
 
网管会 一些基础知识
网管会 一些基础知识网管会 一些基础知识
网管会 一些基础知识Jammy Wang
 
2010 5 d4d393f6
2010 5 d4d393f62010 5 d4d393f6
2010 5 d4d393f6Y YU
 
基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计Hengyi
 
少年科技人雜誌 2015 年八月
少年科技人雜誌 2015 年八月少年科技人雜誌 2015 年八月
少年科技人雜誌 2015 年八月鍾誠 陳鍾誠
 
networking performance
networking performancenetworking performance
networking performance朋 王
 

Similar to 发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥 (10)

Wbm9000动态库说明L
Wbm9000动态库说明LWbm9000动态库说明L
Wbm9000动态库说明L
 
2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享2016-04-07-清大-國際化開源專案技術實務與經驗分享
2016-04-07-清大-國際化開源專案技術實務與經驗分享
 
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
 
Go语言: 互联网时代的C
Go语言: 互联网时代的CGo语言: 互联网时代的C
Go语言: 互联网时代的C
 
P2 p加速分析与设计
P2 p加速分析与设计P2 p加速分析与设计
P2 p加速分析与设计
 
网管会 一些基础知识
网管会 一些基础知识网管会 一些基础知识
网管会 一些基础知识
 
2010 5 d4d393f6
2010 5 d4d393f62010 5 d4d393f6
2010 5 d4d393f6
 
基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计基于嵌入式系统的Avs P10编码系统设计
基于嵌入式系统的Avs P10编码系统设计
 
少年科技人雜誌 2015 年八月
少年科技人雜誌 2015 年八月少年科技人雜誌 2015 年八月
少年科技人雜誌 2015 年八月
 
networking performance
networking performancenetworking performance
networking performance
 

More from imShining @DevCamp

如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏imShining @DevCamp
 
Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐imShining @DevCamp
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂imShining @DevCamp
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 imShining @DevCamp
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江imShining @DevCamp
 
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山imShining @DevCamp
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 imShining @DevCamp
 
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞imShining @DevCamp
 
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林imShining @DevCamp
 
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛imShining @DevCamp
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林imShining @DevCamp
 
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCampimShining @DevCamp
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践imShining @DevCamp
 

More from imShining @DevCamp (13)

如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏如何创建更加灵活的App | 大众点评 屠毅敏
如何创建更加灵活的App | 大众点评 屠毅敏
 
Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐Android在多屏幕、多设备上的适配 | 布丁 任斐
Android在多屏幕、多设备上的适配 | 布丁 任斐
 
和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂和Android源代码一起工作 | 海豚浏览器 胡继堂
和Android源代码一起工作 | 海豚浏览器 胡继堂
 
Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明 Android消息推送实现 | 友盟 徐仙明
Android消息推送实现 | 友盟 徐仙明
 
千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江千万级并发在线推送系统架构解析 | 个信互动 叶新江
千万级并发在线推送系统架构解析 | 个信互动 叶新江
 
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
凡客移动应用之Android + HTML5技术运用 | 凡客 汪健飞 徐金山
 
Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振 Android账户同步备份框架 | 盛大乐众ROM 郭振
Android账户同步备份框架 | 盛大乐众ROM 郭振
 
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
简单中的不简单,iPhone应用开发实践总结:《社区类iPhone应用开发的技术实践》| 麻麻帮 陈剑飞
 
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
在iOS平台上用Cocos2D做开发 | iOS独立开发者 秦春林
 
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
在iOS平台上实现全功能视频处理 | 盛大微酷 赵志猛
 
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
iOS平台应用详解:《Siri:I,robot! Siri语音识别系统详解》| 新浪 张俊林
 
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
逆向工程技术详解:解开IPA文件的灰沙 -- 通过静态分析工具了解IPA实现 | 友盟 张超 | iOS DevCamp
 
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
从知乎 iPhone 端重构说开去:Web 为主的复杂社交产品的 iOS 端开发策略及实践
 

发现和建立多设备之间的数据通信 | 豌豆荚实验室 孙桥

  • 3. 豌豆荚的手机管理任务 ¨  豌豆荚,简单好用的 Android 手机管理软件,管 理超过 5000w 台 Android手机。 ¨  豌豆荚的 Phone Management Protocol (PMP) ¤  Google Protocol Buffers ¤  协议内容
  • 4. Google Protocol Buffers ¨  Protocol Buffers are a way of encoding structured data in an efficient yet extensible format. Google uses Protocol Buffers for almost all of its internal RPC protocols and file formats.
  • 5. Google Protocol Buffers example.proto message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; }; message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; }; repeated PhoneNumber phone = 4; }
  • 6. Google Protocol Buffers ¨  序列化 public byte[] serialization() { ExampleProto.Person.Builder exampleBuilder = ExampleProto.Person.newBuilder(); exampleBuilder.setId(1); exampleBuilder.setName("sunqiao"); exampleBuilder.setEmail("sunqiao@wandoujia.com"); exampleBuilder.addPhone(PhoneNumber.newBuilder() .setType(PhoneType.WORK).setNumber("1861817****").build()); return exampleBuilder.build().toByteArray(); }
  • 7. Google Protocol Buffers ¨  反序列化 public ExampleProto.Person deserialization(byte[] personInBytes) { ExampleProto.Person person = null; try { person = ExampleProto.Person.parseFrom(personInBytes); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } return person; }
  • 9. Google Protocol Buffers ¨  反序列化时间
  • 10. Google Protocol Buffers ¨  序列化后数据大小
  • 11. Google Protocol Buffers ¨  内存使用 - toByteArray() public byte[] toByteArray() { try { final byte[] result = new byte[getSerializedSize()]; final CodedOutputStream output = CodedOutputStream.newInstance(result); writeTo(output); output.checkNoSpaceLeft(); return result; } catch (IOException e) { throw new RuntimeException( "Serializing to a byte array threw an IOException " + "(should never happen).", e); } }
  • 12. Google Protocol Buffers ¨  内存使用 – 嵌套 message Parent { optional string content_type = 1; optional bytes content = 2; }; message Child1 { optional int32 id = 1; optional string name = 2; optional string des = 3; }; message Child2 { optional string title = 1; optional string content = 2; optional bytes icon = 3; };
  • 13. Google Protocol Buffers ¨  运行库大小 ¨  optimize_for ¤  SPEED ¤  CODE_SIZE ¤  LITE_RUNTIME
  • 14. Google Protocol Buffers ¨  运行库大小 Feature protobuf Protobuf (lite-runtime) Protobuf-j2me Runtime library size 420KB 77KB 22KB Generated code 100% 73% 26% size Enumerations YES YES YES Unknown fields YES YES NO Immutability YES YES NO Groups YES YES NO Reflection YES NO NO Descriptors YES NO NO
  • 15. Phone Management Protocol ¨  消息格式 ¤  Request n  Header n  Token,用于标识请求,并且Token中包含安全验证信息 n  Service Uri,服务地址,pmp://contact/getContacts n  Client,发起这次请求的客户端 n  Content-Range,请求的数据范围 n  Body n  Parameters,参数为键值对
  • 16. Phone Management Protocol ¨  消息格式 ¤  Response n  Header n  Token,用于标识某个请求的响应 n  Content-Type,用于标识Body中的数据类型 n  Content-Length,用于标识Body中的数据长度 n  Content-Range,用于标识Body中包含的数据在整个请求结果 中的范围 n  StatusCode,类似与Http 1.1 的 StatusCode n  Body
  • 17. Phone Management Protocol ¨  Content-Type ¤  类似于MIMEType,一个字符串对应一个使用 protobuf定义的类型,作为PMP的类型体系 vnd.pmp.item/int -> BaseProto.Int vnd.pmp.dir/int -> BaseProto.Ints
  • 18. Phone Management Protocol ¨  Service Uri ¤  服务地址,例如 pmp://sms/receive ¨  目前有四种类型的服务 ¤  普通服务 ¤  支持 Content-Range 的服务 ¤  支持 Partial-Return 的服务 ¤  支持 Keep-Alive 的服务
  • 19. Phone Management Protocol ¨  普通服务 Respo n Head se er Token t : Reques Conte 12345** r Heade 2345*** vnd.p nt-Type: * 1 mp Token: pmp://sms/ Conte .item/int : n Ser vice unt Statu t-Length:1 SCo getSM DA_PC_XXX X Body sCode:20 0 Client: 1 (pr otobu Body f seri alize d)
  • 20. Phone Management Protocol ¨  支持 Content-Range 的服务 Respo n Head se er t Reques Token : r Heade 2345*** Conte 12345** 1 Token: pmp://file/w rite vnd.p nt-Type: * mp : Ser vice _PC_XXXX /1400 Conte .item/int n DA Client: Range: 0-10 23 Statu t-Length:4 Conten t- Body sCode:20 tr> 0 B ody .pmp.item/s yte> 1024 (prot <pa th, vnd .pmp.dir/b obuf t, vnd seria < conten lized )
  • 21. Phone Management Protocol ¨  支持 Partial-Return 的服务 Respo n Head se er Token : t Conte 12345** Reques app nt-Type: v * r nd.pm Heade 2345*** Conte p.dir/ 1 list Token: pmp://app/ Statu nt-Le n : Ser vice _PC_XXXX sCod gth:10204 Conte e:2 Client: DA nt-Ra 06 X 30 int> Body nge: Body .pm p.item/ 0-9/ y pe, vnd apps 300 <appT (prot obuf seria lized Conte ) nt-Ty Conte pe nt-Le : vnd.pmp Statu n .dir/i Body sCod gth:4 nt e:200 Body 300 (prot obuf seria lized
  • 22. Phone Management Protocol ¨  支持 Keep-Alive 的服务 Respo n Head se er Token : Conte 12345** Reques t notifi nt-Type: v * r cat nd.pm Heade 2345*** ait Conte ion p.dir/ 1 c ation/w nt-Le Token: pmp://notifi Statu n : sCod gth:1024 Ser vice _PC_XXXX Conte e:2 DA nt-Ra 06 X ttl Client: Body nge: nt> 0-1/ Body .pmp.item/i notifi catio ttl < ttl, vnd n (pro tobuf seria Conte .. Conte nt-Type: v n n Statu t-Length:4 d.pmp.dir Body sCode:20 /int 0 ttl (p rotob uf se rializ ed
  • 23. Phone Management Protocol ¨  安全性 ¤  使用Token来验证请求是否非法,Token中包含了安 全信息(必须是手机授权的客户端才能访问),具 体算法不详
  • 24. Phone Management Protocol ¨  兼容性 ¤  兼容性问题是由于对协议进行升级导致的出现不同的协议版 本的客户端和服务器端相互请求的问题 ¤  产生兼容性问题的原因 n  修改方法接口定义 n  修改数据结构定义 n  修改安全验证方式 n  性能优化,使用了新的序列化/反序列化方法 ¤  解决方案 n  不修改删除已有方法,只新增方法 n  不修改删除已有数据结构字段,只新增新的字段 n  只有一种安全验证方式 n  只使用protobuf进行序列化和反序列化
  • 25. Q&A