這篇文章主要介紹了node.js + socket.io 實現點對點隨機匹配聊天,具有一定的參考價值,感興趣的小伙伴們可以參考一下
真心佩服那些可以經常發布筆記的人,其實我也想經常發來的,奈何技術不夠加上懶,要向大神們多多學習了,前段時間有用bomb平台自帶的socket寫一個聊天室,其實基本就是改了改它的demo,這次想實現一個隨機私聊,所以自己基於node 和socket.io 來搭服務,當然,第一次用node做東西玩,雖然做的不好,但是也蠻分享下哈。
先說說用到的東西, node 用來做後台服務,express 用來託管靜態資源,然後socket.io 用來傳送聊天資料。接下來說說思路,其實用socket.io來傳資料是很簡單的一件事情,我們只需要再前端頁面引入socket.io.js 然後再node端也require('socket. io'),把它在後端跑起來,那麼前端就可以透過以下程式碼來發送或接收訊息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
我們來看後端怎麼把socket跑起來
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
當然不只如此,因為websocket協議,是在瀏覽器和伺服器之間建立了一個長連結來相互傳輸數據,對伺服器而言,如果打開了好幾個頁面,那麼就有好幾個socket實例,每個建立連接的前端頁面都會有一個socket實例,這樣就為接下來的點對點私聊提供了思路。當然,我們也可以透過直接廣播來傳送訊息,不過這適用於聊天室情境。
那如何實現點對點呢,之前說了,每個建立連接的頁面都會產生一個socket實例,那麼我們只需要後端在接收訊息的同時,判斷這個socket實例是和哪個個實例在聊天,只把訊息傳送給另一個符合的socket實例就好了。簡單來說就像寫信一樣,我把訊息傳送給後端,然後告訴後端,這個訊息是給xxx的,然後後端找到xxx對應的socket實例,將訊息發給他就好了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
透過上面的程式碼,後端得到了一個userServer的對象,裡面是每個連接socket和其id的對應值,這樣,就可以透過每次發送訊息時,附帶要接收物件的id來達到點對點的資料傳輸。
接下來就是資料處理咯,如何取到對方的id啊等等,鑑於我表達能力有限,加上懶,就不囉嗦啦~~ 程式碼我都託管在github歡迎自己下下來看咯
以上是node.js + socket.io 實作聊天功能詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!