Jack Jiang

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

               摘要: 1、概述本文來自騰訊視頻云終端技術總監rexchang(常青)技術分享,內容分別介紹了微信小程序視音視頻和WebRTC的技術特征、差異等,并針對兩者的技術差異分享和總結了微信小程序視音視頻和WebRTC互通的實現思路以及技術方案。希望能帶給你啟發。學習交流:- 即時通訊開發交流3群:185926912[推薦]- 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM》(本文同步發布于:ht...  閱讀全文

          posted @ 2018-09-29 11:05 Jack Jiang 閱讀(196) | 評論 (0)編輯 收藏

               摘要: 1、引言消息是互聯網信息的一種表現形式,是人利用計算機進行信息傳遞的有效載體,比如即時通訊網壇友最熟悉的即時通訊消息就是其具體的表現形式之一。消息從發送者到接收者的典型傳遞方式有兩種:1)一種我們可以稱為即時消息:即消息從一端發出后(消息發送者)立即就可以達到另一端(消息接收者),這種方式的具體實現就是平時最常見的IM聊天消息;2)另一種稱為延遲消息:即消息從某端發出后,首先進入一個容器進行臨時存...  閱讀全文

          posted @ 2018-09-26 14:52 Jack Jiang 閱讀(225) | 評論 (0)編輯 收藏

          1、MMKV簡介

          騰訊微信團隊于2018年9月底宣布開源 MMKV ,這是基于 mmap 內存映射的 key-value 組件,底層序列化/反序列化使用 protobuf 實現,主打高性能和穩定性。近期也已移植到 Android 平臺,一并對外開源。

          MMKV 是基于 mmap 內存映射的 key-value 組件,底層序列化/反序列化使用 protobuf 實現,性能高,穩定性強。從 2015 年中至今,在 iOS 微信上使用已有近 3 年,其性能和穩定性經過了時間的驗證。近期也已移植到 Android 平臺,一并開源。

          MMKV最新源碼托管地址:https://github.com/Tencent/MMKV

          2、MMKV 源起

          在微信客戶端的日常運營中,時不時就會爆發特殊文字引起系統的 crash(請參見文章:《微信團隊分享:iOS版微信是如何防止特殊字符導致的炸群、APP崩潰的?》、《微信團隊分享:iOS版微信的高性能通用key-value組件技術實踐》),文章里面設計的技術方案是在關鍵代碼前后進行計數器的加減,通過檢查計數器的異常,來發現引起閃退的異常文字。在會話列表、會話界面等有大量 cell 的地方,希望新加的計時器不會影響滑動性能;另外這些計數器還要永久存儲下來——因為閃退隨時可能發生。

          這就需要一個性能非常高的通用 key-value 存儲組件,我們考察了 SharedPreferences、NSUserDefaults、SQLite 等常見組件,發現都沒能滿足如此苛刻的性能要求。考慮到這個防 crash 方案最主要的訴求還是實時寫入,而 mmap 內存映射文件剛好滿足這種需求,我們嘗試通過它來實現一套 key-value 組件。

          3、MMKV 原理

          內存準備:

          通過 mmap 內存映射文件,提供一段可供隨時寫入的內存塊,App 只管往里面寫數據,由操作系統負責將內存回寫到文件,不必擔心 crash 導致數據丟失。

          數據組織:

          數據序列化方面我們選用 protobuf 協議,pb 在性能和空間占用上都有不錯的表現。

          寫入優化:

          考慮到主要使用場景是頻繁地進行寫入更新,我們需要有增量更新的能力。我們考慮將增量 kv 對象序列化后,append 到內存末尾。

          空間增長:

          使用 append 實現增量更新帶來了一個新的問題,就是不斷 append 的話,文件大小會增長得不可控。我們需要在性能和空間上做個折中。

          更詳細的設計原理參考MMKV 原理

          4、iOS 指南

          安裝引入(推薦使用 CocoaPods):

          安裝CocoaPods

          打開命令行,cd到你的項目工程目錄, 輸入pod repo update讓 CocoaPods 感知最新的 MMKV 版本;

          打開 Podfile, 添加pod 'MMKV'到你的 app target 里面;

          在命令行輸入pod install;

          用 Xcode 打開由 CocoaPods 自動生成的.xcworkspace文件;

          添加頭文件#import <MMKV/MMKV.h>,就可以愉快地開始你的 MMKV 之旅了。

          更多安裝指引參考iOS Setup

          快速上手:

          MMKV 的使用非常簡單,無需任何配置,所有變更立馬生效,無需調用synchronize:

          MMKV *mmkv = [MMKV defaultMMKV];    [mmkvsetBool:YESforKey:@"bool"];BOOL bValue = [mmkvgetBoolForKey:@"bool"];    [mmkvsetInt32:-1024forKey:@"int32"];int32_t iValue = [mmkvgetInt32ForKey:@"int32"];    [mmkvsetObject:@"hello, mmkv"forKey:@"string"];NSString *str = [mmkvgetObjectOfClass:NSString.classforKey:@"string"];

          更詳細的使用教程參考iOS Tutorial

          性能對比:

          循環寫入隨機的int1w 次,我們有如下性能對比:

          更詳細的性能對比參考iOS Benchmark

          5、Android 指南

          安裝引入:

          推薦使用 Maven:

          dependencies{implementation'com.tencent:mmkv:1.0.10'// replace"1.0.10"with any available version}

          更多安裝指引參考Android Setup

          快速上手:

          MMKV 的使用非常簡單,所有變更立馬生效,無需調用sync、apply。 在 App 啟動時初始化 MMKV,設定 MMKV 的根目錄(files/mmkv/),例如在 MainActivity 里:

          protectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);    String rootDir = MMKV.initialize(this);    System.out.println("mmkv root: "+ rootDir);//……}

          MMKV 提供一個全局的實例,可以直接使用:

          importcom.tencent.mmkv.MMKV;//……MMKV kv = MMKV.defaultMMKV();kv.encode("bool",true);booleanbValue = kv.decodeBool("bool");kv.encode("int", Integer.MIN_VALUE);intiValue = kv.decodeInt("int");kv.encode("string","Hello from mmkv");String str = kv.decodeString("string");

          MMKV 支持多進程訪問,更詳細的用法參考Android Tutorial

          性能對比:

          循環寫入隨機的int1k 次,我們有如下性能對比:

          更詳細的性能對比參考Android Benchmark

          posted @ 2018-09-22 11:20 Jack Jiang 閱讀(266) | 評論 (0)編輯 收藏

               摘要: 本文引用了公眾號純潔的微笑作者奎哥的技術文章,感謝原作者的分享。1、前言老于網絡編程熟手來說,在測試和部署網絡通信應用(比如IM聊天、實時音視頻等)時,如果發現網絡連接超時,第一時間想到的就是使用Ping命令Ping一下服務器看看通不通。甚至在有些情況下通過圖形化的Ping命令工具對目標網絡進行長測(比如:《兩款增強型Ping工具:持續統計、圖形化展式網絡狀況 [附件下載]》、《網絡測試:Andr...  閱讀全文

          posted @ 2018-09-21 18:12 Jack Jiang 閱讀(219) | 評論 (0)編輯 收藏

               摘要: 本文來自知乎官方技術團隊的“知乎技術專欄”,感謝原作者陳鵬的無私分享。1、引言知乎存儲平臺團隊基于開源Redis 組件打造的知乎 Redis 平臺,經過不斷的研發迭代,目前已經形成了一整套完整自動化運維服務體系,提供很多強大的功能。本文作者陳鵬是該系統的負責人,本次文章深入介紹了該系統的方方面面,值得互聯網后端程序員仔細研究。(本文同步發布于:http://www.52im...  閱讀全文

          posted @ 2018-09-18 12:31 Jack Jiang 閱讀(201) | 評論 (0)編輯 收藏

               摘要: 1、前言網絡通信一直是Android項目里比較重要的一個模塊,Android開源項目上出現過很多優秀的網絡框架,從一開始只是一些對HttpClient和HttpUrlConnection簡易封裝使用的工具類,到后來Google開源的比較完善豐富的Volley,再到如今比較流行的Okhttp、Retrofit。要想理解他們之間存在的異同(或者具體點說,要想更深入地掌握Android開發中的網絡通信技...  閱讀全文

          posted @ 2018-09-17 10:44 Jack Jiang 閱讀(243) | 評論 (0)編輯 收藏

               摘要: 本文原文內容來自InfoQ的技術分享,本次有修訂、勘誤和加工,感謝原作者的分享。1、前言自從2018年8月20日子彈短信在錘子發布會露面之后(詳見《老羅最新發布了“子彈短信”這款IM,主打熟人社交能否對標微信?》),關于它的討論不絕于耳,7 天融資 1.5 億的傳聞更是將它推到了風口浪尖(請見《[資訊] “子彈短信”發布一周即融得1.5億資金》)。&...  閱讀全文

          posted @ 2018-09-14 13:50 Jack Jiang 閱讀(155) | 評論 (0)編輯 收藏

               摘要: 本文來自“人人都是產品經理”公眾號作者栗栗粥的原創分享。1、前言移動端的時代里,微信占據了社交領域的半壁江山,不得不讓人想起曾經PC時代里的王者“QQ”,微信的爆發和QQ的停滯讓很多人認為微信已經徹底將QQ打敗,QQ已經不再適合這個時代了。前不久看到一句有意思的分享說:“與其說微信為什么能打敗QQ,不如說QQ為什么沒有被微信打敗。R...  閱讀全文

          posted @ 2018-09-11 14:58 Jack Jiang 閱讀(209) | 評論 (0)編輯 收藏

               摘要: 本文原作者:李越,由銀杏財經原創發布,本次內容改動。1、前言上線一周完成1.5億元融資,上線10天總激活用戶數超400萬,8月29日單日新增用戶超100萬,這是子彈短信交出的最新成績單(詳見《[資訊] “子彈短信”發布一周即融得1.5億資金》)。▲ 老羅的“子彈短信”這個牛逼,又可以吹很久了這樣的數據,幾乎就要接近移動互聯網時代APP最快...  閱讀全文

          posted @ 2018-09-09 21:02 Jack Jiang 閱讀(119) | 評論 (0)編輯 收藏

               摘要: 1、前言隨著互聯網的發展,面對海量用戶高并發業務,傳統的阻塞式的服務端架構模式已經無能為力。本文(和下篇《高性能網絡編程(六):一文讀懂高性能網絡編程中的線程模型》)旨在為大家提供有用的高性能網絡編程的I/O模型概覽以及網絡服務進程模型的比較,以揭開設計和實現高性能網絡架構的神秘面紗。限于篇幅原因,請將本文與《高性能網絡編程(六):一文讀懂高性能網絡編程中的線程模型》連起來讀,這樣會讓知識更連貫。...  閱讀全文

          posted @ 2018-09-06 21:09 Jack Jiang 閱讀(247) | 評論 (0)編輯 收藏

          僅列出標題
          共50頁: First 上一頁 39 40 41 42 43 44 45 46 47 下一頁 Last 
          Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 都匀市| 桂林市| 安乡县| 钟山县| 垫江县| 突泉县| 丹巴县| 斗六市| 九江市| 获嘉县| 仁怀市| 永胜县| 祁连县| 朝阳区| 凉城县| 邵武市| 长汀县| 平山县| 长治市| 昌黎县| 托里县| 隆昌县| 郴州市| 公主岭市| 高雄县| 丁青县| 临沭县| 定襄县| 南澳县| 达拉特旗| 盐池县| 星子县| 南木林县| 舞阳县| 松桃| 平顺县| 郯城县| 三门峡市| 拉萨市| 托里县| 涞源县|