Jack Jiang

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

               摘要: 1、前言2017 年 12 月,微信小程序向開發者開放了實時音視頻能力,給業內帶來廣闊的想象空間。連麥互動視頻直播技術在 2016 年直播風口中成為視頻直播的標配,然而只有在原生的 APP 上才能保障良好的用戶體驗。那時候,在微信小程序中無法進行實時音視頻互動。微信小程序在去年 12 月宣布開放實時音視頻能力,再加上去年 6 月蘋果宣布即將支持 WebRTC,業內一下子千樹萬樹梨花開,前途一片光明...  閱讀全文

          posted @ 2018-05-02 11:10 Jack Jiang 閱讀(656) | 評論 (0)編輯 收藏

               摘要: 1、前言每年年初騰訊公司都要制定 SNG 成本優化年度目標,過去三年已經用技術手段為公司節省了超過 10 億的現金流。產品的架構和容量也越來越健康,繼續成本優化變得十分艱難。但我們在迷茫中仍然定下了再優化 3 億元的目標。很幸運,2017 年我們實現了這個目標,并再次獲得公司級獎勵,這是非常不容易的。因為“成本與質量”是個平衡木,而 2017 年 SNG 產品面臨著激烈的內...  閱讀全文

          posted @ 2018-04-28 10:51 Jack Jiang 閱讀(653) | 評論 (0)編輯 收藏

               摘要: 本文來自微信開發團隊WeMobileDev公眾號的技術分享。1、前言微信的移動客戶端全文搜索中的多音字問題一直是搜索體驗的痛點之一。微信客戶端全文搜索在上線以后,也經常收到用戶關于多音字問題的反饋。所以,微信全文搜索中的多音字搜索成了一個迫切需要解決的問題。本文重點講述微信安卓客戶端在SQLite FTS5的基礎上,多音字問題的解決方案。另外:微信團隊在另一個文章《微信手機端的本地數據全文檢索優化...  閱讀全文

          posted @ 2018-04-17 16:36 Jack Jiang 閱讀(605) | 評論 (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 閱讀(702) | 評論 (0)編輯 收藏

               摘要: 本文作者:丁同舟,轉載自“隨手記技術團隊”微信公眾號。1、前言跟移動端IM中追求數據傳輸效率、網絡流量消耗等需求一樣,隨手記客戶端與服務端交互的過程中,對部分數據的傳輸大小和效率也有較高的要求,普通的數據格式如 JSON 或者 XML 已經不能滿足,因此決定采用 Google 推出的 Protocol Buffers 以達到數據高效傳輸。(本文同步發布于:http://ww...  閱讀全文

          posted @ 2018-04-02 12:23 Jack Jiang 閱讀(1056) | 評論 (0)編輯 收藏

               摘要: 1、長連接在iOS開發中的應用常見的短連接應用場景:一般的App的網絡請求都是基于Http1.0進行的,使用的是NSURLConnection、NSURLSession或者是AFNetworking,Http1.0鏈接最顯著的特點就是客戶端每一次需要主動向服務端發送請求,都需要經歷建立鏈接、發送請求、返回數據、關閉鏈接這幾個階段,是一種單向請求且無狀態的協議。長連接的應用場景:有的時候,我們需要服...  閱讀全文

          posted @ 2018-03-26 11:53 Jack Jiang 閱讀(1034) | 評論 (0)編輯 收藏

               摘要: 1、前言IM App 是我做過 App 類型里復雜度最高的一類,里面可供深究探討的技術難點非常之多。這篇文章和大家聊下從移動端客戶端的角度所關注的IM消息可靠性和送達機制(因為我個人對移動客戶端的經驗積累的比較豐富嘛)。學習交流:- 即時通訊開發交流群:320837163[推薦]- 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM》(本文同步發布于:http://www.52im.n...  閱讀全文

          posted @ 2018-03-19 14:52 Jack Jiang 閱讀(512) | 評論 (0)編輯 收藏

               摘要: 編輯文章1、前言從直播在線上抓娃娃,不斷變化的是玩法的創新,始終不變的是對超低延遲的苛求。實時架構是超低延遲的基石,如何在信源編碼、信道編碼和實時傳輸整個鏈條來構建實時架構?在實時架構的基礎之上,如果通過優化采集、編碼、傳輸、解碼和渲染中的關鍵環節來降低延遲?本文將會介紹即構在這方面的思考與實踐。學習交流:- 即時通訊開發交流群:320837163 [推薦]- 移動端IM開發入門文章:《...  閱讀全文

          posted @ 2018-03-17 10:59 Jack Jiang 閱讀(541) | 評論 (0)編輯 收藏

               摘要: 一個典型的IM系統中最為重要也是用戶最先接觸到的——就是基于Http的SSO單點登陸接口(有的系統里可能并不叫SSO接口,本文討論的是其廣義:即實現身份認證功能的http接口),那么這個SSO接口工作原理是什么?可以怎么來實現?有無最佳實踐建議?  閱讀全文

          posted @ 2018-01-18 14:35 Jack Jiang 閱讀(641) | 評論 (0)編輯 收藏

               摘要: 微信內部正在使用的網絡層封裝庫Mars于2016年12月28日正式公開源碼,Mars開源的意義是可為IM及相關技術應用領域的同行帶來很多有價值的實踐成果,畢竟微信的體量和應用規模決定了技術的高度,確實是值得同行學習和關注。  閱讀全文

          posted @ 2016-12-28 22:21 Jack Jiang 閱讀(1821) | 評論 (0)編輯 收藏

          僅列出標題
          共50頁: First 上一頁 42 43 44 45 46 47 48 49 50 下一頁 
          Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 马关县| 灵璧县| 蒙自县| 兖州市| 嵩明县| 瑞昌市| 牟定县| 台湾省| 武鸣县| 龙山县| 施秉县| 开阳县| 卓尼县| 台湾省| 易门县| 凤山市| 林周县| 四会市| 福建省| 九台市| 锡林郭勒盟| 江油市| 龙南县| 阿拉善右旗| 兴海县| 黄梅县| 香港 | 奎屯市| 红桥区| 醴陵市| 蚌埠市| 丰原市| 济源市| 台中市| 福建省| 邵阳县| 祁阳县| 邻水| 水城县| 天峻县| 巴楚县|