webRTC技術是什麼? web
WebRTC,名稱源自網頁即時通訊(英語:Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的API。它於2011年6月1日開源並在Google、Mozilla、Opera支持下被歸入萬維網聯盟的W3C推薦標準。算法
顧名思義就是,webRTC.io server 就是Node.js服務端的代碼,配合client端代碼便可實現真正端webRTC~ 本文只解析服務端的webRTC源碼數組
首先看看webRTC.io的使用瀏覽器
其餘先不要看,先看使用,往webrtc.io的listen方法中傳入server對象,便可獲得webRTC對象~websocket
**進入webrtc.io這個庫,發現裏面只有一個index.js文件,這就好辦~
**session
根據傳入的server對象,建立websocket服務,並調用attachEvents後,返回這個websocket的事例對象socket
咱們看attachEvents接受一個manager即websocket的實例對象爲參數**tcp
而後給websocket實例掛載事件,由於websocket在Node.js中繼承了自定義事件模塊,具備ondata,onclose,onmessage等事件函數
在rtc中初始化一個屬性sockets爲空數組,每次有socket對象鏈接,那麼就把句柄對象保存起來,之後調用socket.send就能夠往內核緩衝區寫入數據,再根據tcp的Nagle算法,適時推送數據給client端spa
id()是一個生成惟一id屬性的函數,相似UUID
既然每一個socket都有了一個獨一無二的id屬性,那麼咱們須要定義一個根據id找到這個socket句柄對象的函數,這裏使用的是遍歷sockets數組方式
即時通信因爲是雙工通信,須要兩邊定義好本身的一套實現協議,例如事件名稱,數據,而後兩端的分別處理狀況。 因此這裏也能夠提早定義好對應的事件處理~ 事件名稱在每次傳輸的數據過程當中就塞進裏面~
像這樣一開始就提早定義好了自定義事件回調,那麼接受到數據後就會觸發對應的回調,而且傳入socket句柄對象和payload載荷數據
下面是一個加入聊天房間的觸發回調
源碼逐行解析:
1、拿到傳輸的data數據,看裏面是否有房間名對應的房間,沒有的話生成一個空數組,而且把把加入的這個socket句柄添加進去(方便後期整個房間進行推送,遍歷,逐個調用sokcet.send便可向這個長連接的客戶端發送數據)
2、保存這個房間全部socket句柄對象集合,掛載到rtc對象的rooms屬性下的對應房間名下,例如:rtc.rooms.cxk = [cxk1,cxk2,cxk3] 等未來遍歷rtc.rooms時候,使用item.send()便可向房間裏全部人推送數據
3、向當前發起加入這個房間的socket句柄對象寫入數據,通知他加入成功,加入的房間裏面有哪些socket.id , 每一個id都在服務端存儲着socket句柄對象,一種key-value映射關係,相似sessionId.
**到此,一共800字,就完整解析了整個webRTC.io的服務端庫,下篇文章將帶你們走進客戶端源碼逐行解析,歡迎幫忙點個在看,原創不易,謝謝支持
**