成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

微信Mars:客戶端跨平臺組件的開發經驗

移動開發
Mars 是微信官方的終端基礎組件,是一個使用 C++ 編寫的業務性無關,平臺性無關的基礎組件。目前已接入微信 Android、iOS、Mac、Windows、WP 等客戶端。

[[177394]]

12月9日,由InfoQ主辦的中國技術開放日廣州站將在廣州四季酒店舉行(歡迎廣州的同學免費報名參加,報名地址見文末閱讀原文)。我們邀請了來自騰訊、阿里、百度、唯品會的技術專家前來分享一線移動開發實踐。本次開放日上,來自微信的高級工程師周志杰將分享《微信Mars:移動互聯網下的高質量網絡連接探索》,對于這個話題,我采訪了周志杰,了解微信Mars是什么,以及微信在跨平臺組件開發上的一些經驗總結。

Mars 是微信官方的終端基礎組件,是一個使用 C++ 編寫的業務性無關,平臺性無關的基礎組件。目前已接入微信 Android、iOS、Mac、Windows、WP 等客戶端。現正在籌備開源中,它主要包括以下幾個部分:

  • COMM:基礎庫,包括socket、線程、消息隊列、協程等基礎工具;
  • XLOG:通用日志模塊,充分考慮移動終端的特點,提供高性能、高可用、安全性、容錯性的日志功能;
  • SDT:網絡診斷模塊;
  • STN:信令傳輸網絡模塊,負責終端與服務器的小數據信令通道。包含了微信終端在移動網絡上的大量優化經驗與成果,經歷了微信海量用戶的考驗。

其中STN(信令傳輸網絡)為核心模塊。

Mars最早起源于微信的實際發展需要。由于微信多平臺、億級用戶,微信基礎功能的修改影響重大。但不同平臺不同的實現導致眾多平臺上很難統一,一方面不利于質量把關,可能存在重大隱患,一方面也不利于微信對基礎研究的深入。因此,微信開始了跨平臺基礎組件的開發,并且在微信中沉淀多年。隨著基礎組件的發展與穩定,他們希望通過開源的力量進一步的提升微信的基礎,并且也期待行業的互相交流與促進,因此啟動了Mars項目。

微信的網絡層設計到很多不同的業務,在微信中使用到的絕大部分功能,都是基于Mars提供的網絡組件,包括文本消息、語音消息、朋友圈等核心功能。只有少部分業務不在范圍內,例如VOIP、Webview等。微信中使用到的網絡服務,大體分為兩種類型:信令網絡、數據網絡。其中STN負責信令網絡,CDN組件則負責數據網絡。但由于CDN涉及到騰訊內部的CDN服務,因此在Mars的開源列表中并沒有包含CDN部分。

SDT網絡診斷模塊提供了最基礎的檢測能力,需要由使用者自己組合使用。各個平臺的Reachability API能反映的情況有局限,無法應對復雜的網絡診斷,事實上有一些開源項目就是為了替換系統API。微信由于自身特點對網絡診斷要求很高,因此將它作為基礎的跨平臺組件進行開發維護。

STN是微信的信令傳輸網絡,也可以認為是小數據傳輸網絡,是微信日常中使用最頻繁的網絡通道。在開源設計上,STN抽象了微信的使用模型,使得STN成為業務無關的網絡通道,并且應用到了包括微信在內的多個騰訊內部應用中。與AFNetworking、Retrofit、Okhttp等框架不同,STN不僅是跨平臺的網絡解決框架,更是著重了“移動互聯網“這一特點,結合移動互聯網的不穩定特性,做了大量的優化工作,并且這些優化都是經過了微信長時間的驗證和使用的。除此之外,STN中還包含了很多其他方面的實用設計,包括自定義DNS、容災設計、負載考量、APP的前后臺考量、休眠機制考量、省電機制等等。

在實際的使用上,STN也提供了比其它網絡框架更多的空間:

  1. 數據監控:STN提供了許多數據回調接口,使得應用可以基于這些網絡數據,建立統計分析、監控等工具來管理應用的實際網絡情況;
  2. 問題定位:STN中含有很多關鍵日志,并且日志的設計已經幫助微信定位了很多的網絡層問題。結合Mars提供的XLOG日志機制,應用可以運行時也打開日志,非常方便定位;
  3. 參數配置:STN中將很多參數抽離為配置,使得應用可以根據自己的情況進行修改。

網絡通道上,目前STN提供了長連、短連兩種類型的通道,用于滿足不同的需求。使用STN后,應用開發者只需關注業務開發。移動互聯網的各種“坑”則可以交由STN幫你處理。

微信Mars跨平臺組件開發經驗

客戶端的跨平臺組件一般是指由C++等編寫的代碼,編譯為各個平臺的二進制鏈接庫,然后通過平臺提供的SDK調用和打包進App內。跨平臺組件一般都是底層功能,特點是與平臺無關、與UI界面無關,像第三方的游戲引擎、數據庫等一般都以跨平臺形式出現。

跨平臺組件可以實現一份代碼到處運行,減少開發和維護的精力,因此,當移動開發團隊擴大、業務規模膨脹的時候,將一些通用的、易出問題的底層功能提取出來做成跨平臺組件很有必要。

網絡層其實和系統以及UI界面的耦合很小,除了硬件設備相關、WebView等需要依賴系統的部分外,網絡層幾乎都可以實現跨平臺,一份代碼。但微信會將能抽象成通用模型、通用能力的部分考慮以組件的形式跨平臺。

跨平臺組件在開發過程中需要注意的地方,也和一般的移動開發有所不同。微信在Mars的開發中,會以高可用、高性能、低負載、容災性等目標來要求。

跨平臺組件開發的難點在于,跨平臺方案需要考慮各種平臺上的API兼容性問題,在技術選型上需要付出更多的努力;需要考慮不同平臺的特性,例如休眠機制等,根據不同的特性進行設計;跨平臺的基礎組件需要將問題進行更加本質的思考,避免復雜方案,避免方案的頻繁變更等。

另外,跨平臺組件由于對應用的影響很大,對它的穩定性和測試都要求更高。不過,只要設計良好,跨平臺組件并不會對應用的穩定性造成威脅。從目前微信的使用情況來看,跨平臺組件帶來的Crash在總體中占比較小。測試方面,微信在各平臺上有相應的測試工具,同時也有較多的自動化測試,能保障組件的穩健性。同時針對組件的某些特性,他們也有設計專門的測試場景。

Mars將在不久的將來進行開源,并且微信會持續的維護Mars開源項目。

責任編輯:龐桂玉 來源: 移動開發前線
相關推薦

2023-03-05 18:36:52

ChatGpt跨平臺ORM

2018-03-07 11:11:46

微信開源小程序

2015-01-27 23:27:48

微信微信客戶端

2009-12-25 15:12:01

WPF平臺

2009-12-22 18:18:11

WCF客戶端編程

2010-08-01 16:20:29

Android

2009-03-04 10:27:50

客戶端組件桌面虛擬化Xendesktop

2020-12-24 17:10:54

DockerLinux微信

2011-04-22 10:34:09

SimpleFrame

2010-02-22 11:10:17

WCF獲取客戶端IP

2013-07-04 10:06:32

AppCan

2012-09-21 15:18:38

Java項目Java開發

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2010-06-01 13:42:37

TortoiseSVN

2009-04-22 18:42:13

Vmware虛擬化英特爾

2012-09-21 12:58:37

Java項目Java開發

2012-09-21 10:14:05

Java項目Java開發

2012-09-21 14:38:20

Java項目Java開發

2012-09-21 15:13:10

Java項目Java開發

2011-05-18 09:56:31

UbuntuLinux客戶端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区三区久久久 | 午夜国产一级 | 国产成人精品亚洲日本在线观看 | 三级成人在线观看 | 欧美日韩视频在线第一区 | a级毛片国产 | 91精品一区 | 91av亚洲| 国产精品免费高清 | 视频一区中文字幕 | 国产成人在线观看免费 | 一区二区三区四区不卡 | 在线欧美a| 日本精品视频在线 | 国产精品1区 | 午夜免费在线电影 | 超碰8| a在线免费观看视频 | 国产精品免费一区二区三区四区 | 黄a大片| 日韩在线一区二区三区 | 精精国产xxxx视频在线 | 成人免费视频网站在线观看 | 久久久久久久久久久91 | 欧美久久一区二区三区 | 精品久久久久国产免费第一页 | 一区二区免费在线视频 | 国产成人精品福利 | 精品久久久久久亚洲精品 | 激情 婷婷 | 亚洲精品电影网在线观看 | 国产一区二区三区四区五区加勒比 | 丝袜一区二区三区 | 日韩在线观看 | 91精产国品一二三区 | 毛片免费观看视频 | 日本三级在线视频 | 久久精品久久久 | 精品无码三级在线观看视频 | 99久久婷婷国产综合精品电影 | 伊人网综合在线 |