天天看點

WebRTC信令伺服器實作 八、第一節 如何使用socket.io發送消息

今天我們學習用socket.io發送消息,socket.io發送消息發送消息的情況非常多 ,大概有十來種情況。其中有四五項是我們要清楚和了解的。

給本次連結發送消息

socket.emit()      

這表示用戶端發送了一個消息給服務端 ,服務端收到這個消息之後給了一個callback. 也就是一個傳回,比如說我要加入房間,當我加入之後他給我回一個已經加入成功。隻是給我本人發的。我收到加入成功之後,我就可以做後面的邏輯處理了。這樣就形成了一個異步的操作。

給某個房間内所有人發消息

io.in(room).emit()      

這相當于是一個廣播了,所有人就包括我自己,我發的這個消息我自己也要知道。比如還以加入房間為例,其實他要給房間中的每一個人都要發送一個消息,這個使用者已經加入房間了。當然有的業務就不需要,他隻是給你發送者回了“你已經加入成功了”。

還有就是各個端都要維護一個使用者清單,那誰來了誰出去了,我都要清楚,這個時候就要每一個人都收到這個消息,對于發送者來說,我收到這個消息,就可以做後面的邏輯處理,做音視訊的采集等。

對于其他使用者來說,當我收到使用者已經加入的消息的時候,就更新 一個我的使用者清單,将這個使用者添加到我的使用者清單當中去,這是給某個房間内的所有人發消息。

io就代表整個節點,我們部署的socket節點裡,上面的所有的人都包含在内,room就代表某個具體的房間,也就是說房間内的所有人要發送 。

除本連接配接外,給某個房間内所有人發消息

socket.to(room).emit()      

也就是說在這個房間内,我發送的消息我自己不收到,其他人都收到,比如我要發一個全體靜音,就是不讓别人說話了,隻允許我說話,那我發送消息的時候就要使用這個。

socket代表我們建立連接配接時的socket,給房間内的所有其他人發送消息。

除本連接配接外,給所有人發消息

socket.broadcast.emit()      

這個是除本人外,給所有人發消息,在一個IO節點裡,可能有很多個房間,比如10個或者20個房間,那麼這個broadcast就是廣播,我要給除我之外的所有人(整個站點的所有人)發消息。比如我發了一個通知,将節點中的所有使用者都切掉,就是都要斷掉去連另外的節點,然後你可以通過超級管理者的使用者,給所有人發消息。

當我用戶端收到消息如何處理

發送action指令

S: socket.emit('action');
C: socket.on('action',function(){...});      

當S(server端)發送一個消息action,也就是一個動作,那麼C(client端)要監聽這個動作,通過socket.on監聽這個action,它處理的時候後面帶了一個函數,後面是一個具體的邏輯。

發送了一個action指令,還有data資料

S: socket.emit('action', data);
C: socket.on('action', function(data){...});      

發送了一個action, 還有兩個資料

S: socket.emit(action, arg1, arg1);
C: socket.on('action', function(arg1,arg2){...});      
S: socket.emit('action',data,function(arg1,arg2){});
C: socket.on('action',function(data,fn){fn('a','b');});      

繼續閱讀