直播間插件化的實踐

序言

在直播間開發中,隨著業務越來越復雜,以往MVC,或mvvm式的架構不太能滿足業務和技術的要求。舉例來說,如果產品想進行ABTest,對某些用戶整個下掉坐席功能,有什么樣的方法可以做到既不影響現有功能又能比較優雅的方式呢。我們在多變復雜的現實環境中,和未來不確定的因素下,又有什么樣的架構方案可以比較完美的解決這些問題,就是今天探討的組件化/變形金剛式開發。

img

插件/組件化是指,一個組件以一種便捷的方式在容器中添加移除查找,配置

對應的api有 addcomponent,removecomponent,getcomponent

組件Component,一個UI或功能的比較完整的模塊。如公屏組件,顯示用戶發言,或進場的信息的模塊。

容器Container,是多個組件的集合,用于完成特定產品上的特定功能,如直播間模塊,直播間的組件有公屏組件,座位席組件,營收送禮組件,活動條組件。

好處

  1. 統一管理容器,通知模塊的生命周期。

比如在直播間模塊中,直播間有進入,觀看,退出直播間的事件,用戶鑒權有登錄踢出,這些事件都可以完整的通知到各個組件。

  1. 支持多實例,方便模塊內部的組織。

以觀看端為例上下滑動就需要支持的多個直播間并存的場景,每個直播間有相同的組件功能。

  1. 統一配置信息

    組件需要用到一下共同的數據,或配置共同的數據,如uid,roomId,roomName

實現步驟

由于涉及到保密性,這里不貼代碼,用純文字或偽代碼的形式講述大致過程。

  1. livingRoomImpl 和 ILivingRoom 對應直播間模塊的聲明和實現,I開頭一般表示protocol,里面的實現
@protocol 組件管理
-(void)添加組件;
-(void)移除組件;
-(id)根據名字找到組件;
-(void)移除所有的組件;
@end  
  1. 組件的共同代理
@protocol 組件的代理
-(instancetype)初始化組件;
-(void)開始添加組件;
-(void)準備移除組件;
-(void)房間號變化;
-(void)用戶被踢出;
-(void)用戶信息變更;
@end
  1. 組件的共同事件
@protocol 組件信息
-(id)appid
-(id)房間號
-(id)用戶id
-(id)房間信息
-(api)組件的api
@end
  1. 各自組件的protocol

如公屏的

@protocol 公屏的protocol
-(bool)發送公屏
@end

另外有營收,坐席等其他組件類似。

注意的點

1.根據protocol找到實例

有一個大前提是需要根據protocol找到對應的實例。

介紹一個比較簡單的方法,根據protocol的名字和直播間id把當前實例保存到數據中心,下次需要取得實例的時候就直接取得該實例。GetComponentByProtocol(protocol)

  1. 隱藏實現類細節。僅僅公開出protocol

    有個技巧是使用c函數去創建實例和完成組裝如 RegisterPublicScreenComponent()

  2. 直播間配置相關的東西最好在初始化的時候,默認加載。注意初始化之前不要使用模塊的方法,這個可以在設計上考慮怎么避免

使用方式

有了之前的基礎,假設我們已經有了直播,公屏,坐席,送禮這些模塊,現在需要把他們組裝起來了。

于是有了以下的代碼

[ATH_MIDWARE(ILivingRoom) createLivingRoom]
RegisterVideoComponent()
RegisterPublicScreenComponent()
RegisterSeatMembersCompnent()
RegisterSendGiftComponent()

需要把一個模塊去掉,注釋掉那個Register即可

如果我們把RegisterVideoComponent注釋,就變成了文字直播間了,也同樣支持送禮等功能。

后續

推行組件化其實是一個很痛苦的事情,面臨著解耦和執行兩個大問題。

  1. 解耦是需要分離出職責,找到組件核心的功能,實現并且對外聲明必要的api

  2. 執行,前提需要理解整個組件化的核心思想,其中的溝通必不可少。如何定位和防止/提示問題也是考驗架構師的能力。

寥寥數語,未能盡興?有對架構有興趣的同學可以添加我微信一起聊 haugnbo

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容