node.js中優(yōu)雅的使用Socket.IO模塊的方法
??前言
上篇文章中結(jié)合websokcet進行了簡單的聊天小案例,但是我們可以發(fā)現(xiàn)使用
ws
模塊來寫代碼的時候未免有一些繁瑣,需要我們自己去設(shè)置type
,使用socket.io后事件監(jiān)聽
將會十分的簡單便捷,很好的彌補了ws
模塊的缺陷。
Socket.IO的定義
Socket.IO是一個WebSocket庫
,包括了客戶端的js
和服務(wù)器端的node.js
,它的目標是構(gòu)建可以在不同瀏覽器和移動設(shè)備上使用的實時應(yīng)用。
Socket.IO將WebSocket、AJAX和其它的通信方式
全部封裝成了統(tǒng)一的通信接口
,也就是說,我們在使用SocketIO時,不用擔心兼容問題,底層會自動選用最佳的通信方式
。
Socket.IO的優(yōu)點
- socket.io封裝了服務(wù)端和客戶端,使用起來非常簡單方便。
- socket.io支持跨平臺,這就意味著你有了更多的選擇,可以在自己喜歡的平臺下開發(fā)實時應(yīng)用。
- socket.io可以自定義事件發(fā)送到對端,對端可以是服務(wù)器,可以是客戶端;使用emit發(fā)送,接收還是on。
- 它會自動根據(jù)瀏覽器從WebSocket、AJAX長輪詢、Iframe流等等各種方式中選擇最佳的方式來實現(xiàn)網(wǎng)絡(luò)實時應(yīng)用,非常方便和人性化,而且支持的瀏覽器最低達IE5.5。如果不支持websocket,可以自動降級為輪詢
node中安裝Socket.IO
打開終端,在終端中輸入以下代碼即可安裝Socket.IO模塊:
npm i socket.io
node中使用Socket.IO
emit
和 on
是最重要的兩個api,分別對應(yīng) 發(fā)送
和 監(jiān)聽
事件.
我們可以非常自由的在服務(wù)端
定義并發(fā)送一個事件emit
,然后在客戶端
監(jiān)聽 on
,反過來也一樣。
發(fā)送的內(nèi)容格式
也非常自由,既可以是基本數(shù)據(jù)類型 Number,String,Boolean 等,也可以是 Object,Array 類型,甚至還可以是函數(shù)
。而用回調(diào)函數(shù)的方式則可以進行更便攜的交互。
emit
socket.emit(eventName[, ...args])
:發(fā)射(觸發(fā))一個事件
socket.emit('aaa','你好,前臺')
在這里以
服務(wù)端
為例子:在服務(wù)端中通過socket.emit()
方法創(chuàng)立一個事件(第一個參數(shù):自定義事件
)aaa
,發(fā)送的信息(第二個參數(shù)
)你好,前臺
.
注意: 第二個參數(shù)可以傳
對象
,因為在emit方法內(nèi)部
帶有JSON.stringfy()
方法,自動將對象轉(zhuǎn)化為字符串。
on
socket.on(eventName, callback)
:監(jiān)聽一個 emit 發(fā)射的事件
socket.on('aaa',(msg)=>{ console.log(msg) })
在這里以
客戶端
為例,客戶端監(jiān)聽服務(wù)端的事件aaa
,隨后通過回調(diào)函數(shù)的方式打印出aaa
傳過來的信息。
在express中引入使用
服務(wù)端
const server = require('http').createServer(app); const io = require('socket.io')(server); io.on('connection', socket => { console.log('恭喜你連接成功!') socket.on("message",(msg)=>{ console.log(msg) //你好 后臺 //注意 : 這里的 io.emit() 是默認轉(zhuǎn)發(fā)給全部客戶端信息,所有客戶端都可以收到 io.emit("allMsg","廣播 : 歡迎來到聊天室") }) }); server.listen(3000);
將
server
當作參數(shù)傳入,目的在于說明io
掛載的服務(wù)依舊是基于http
的。
這里的代碼表示,只要連接成功,就會打印連接成功的信息!
客戶端
<script src="/socket.io/socket.io.js"></script> <script> const socket = io(); //默認連接服務(wù)端啟動的本地端口地址 socket.emit("message","你好 后臺") // 監(jiān)聽服務(wù)端的廣播事件,接收廣播的消息 socket.on("allMsg",(msg)=>{ console.log(msg) //廣播 : 歡迎來到聊天室 }) </script>
在客戶端需要單獨引用
socket.io.js
文件,因為socket.io不是瀏覽器內(nèi)置模塊,需要單獨引用,js文件內(nèi)部代碼 ==> socket.io.js內(nèi)部代碼,將這里的代碼復制到自己創(chuàng)建的js文件中,然后在客戶端中引用。
只要在客戶端中出現(xiàn)const socket = io()
,瀏覽器將會直接默認連接到客戶端啟動的本地服務(wù)地址。
小結(jié)
socket.io這個第三方模塊相對來說,書寫代碼的時候更加的方便與高效,在ws
模塊中通過switch
分支來進行對不同的聊天類型
進行不同的方法呈現(xiàn),而在socket.io
模塊中僅僅通過自定義事件
就可以解決這個問題,并且socket.io可以在服務(wù)器斷開后,當你再次進入客戶端后可以自動連接,整體的表現(xiàn)優(yōu)于ws
模塊。
到此這篇關(guān)于node.js中優(yōu)雅的使用Socket.IO模塊的文章就介紹到這了,更多相關(guān)node.js使用Socket.IO模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決安裝websocket還是報錯Cannot find module'ws&apos
這篇文章主要介紹了如何解決安裝websocket還是報Cannot find module'ws'問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02nodejs將JSON字符串轉(zhuǎn)化為JSON對象報錯的解決
這篇文章主要介紹了nodejs將JSON字符串轉(zhuǎn)化為JSON對象報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫的方法
這篇文章主要介紹了Linux下為Node.js程序配置MySQL或Oracle數(shù)據(jù)庫的方法,這里默認已經(jīng)裝配好了Node環(huán)境然后我們利用npm包管理工具來進行配置,需要的朋友可以參考下2016-03-03