您好,登錄后才能下訂單哦!
本篇內容介紹了“node中怎么優雅使用Socket.IO模塊”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Socket.IO是一個WebSocket庫
,包括了客戶端的js
和服務器端的node.js
,它的目標是構建可以在不同瀏覽器和移動設備上使用的實時應用。
Socket.IO將WebSocket、AJAX和其它的通信方式
全部封裝成了統一的通信接口
,也就是說,我們在使用SocketIO時,不用擔心兼容問題,底層會自動選用最佳的通信方式
。
socket.io封裝了服務端和客戶端,使用起來非常簡單方便。
socket.io支持跨平臺,這就意味著你有了更多的選擇,可以在自己喜歡的平臺下開發實時應用。
socket.io可以自定義事件發送到對端,對端可以是服務器,可以是客戶端;使用emit發送,接收還是on
。
它會自動根據瀏覽器從WebSocket、AJAX長輪詢、Iframe流等等各種方式中選擇最佳的方式來實現網絡實時應用,非常方便和人性化,而且支持的瀏覽器最低達IE5.5。如果不支持websocket,可以自動降級為輪詢
打開終端,在終端中輸入以下代碼即可安裝Socket.IO模塊:
npm i socket.io
emit
和 on
是最重要的兩個api,分別對應 發送
和 監聽
事件.
我們可以非常自由的在服務端
定義并發送一個事件emit
,然后在客戶端
監聽 on
,反過來也一樣。
發送的內容格式
也非常自由,既可以是基本數據類型 Number,String,Boolean 等,也可以是 Object,Array 類型,甚至還可以是函數
。而用回調函數的方式則可以進行更便攜的交互。
emit
socket.emit(eventName[, ...args])
:發射(觸發)一個事件
socket.emit('aaa','你好,前臺')
在這里以
服務端
為例子:在服務端中通過socket.emit()
方法創立一個事件(第一個參數:自定義事件
)aaa
,發送的信息(第二個參數
)你好,前臺
.
注意: 第二個參數可以傳
對象
,因為在emit方法內部
帶有JSON.stringfy()
方法,自動將對象轉化為字符串。
on
socket.on(eventName, callback)
:監聽一個 emit 發射的事件
socket.on('aaa',(msg)=>{
console.log(msg)
})
在這里以
客戶端
為例,客戶端監聽服務端的事件aaa
,隨后通過回調函數的方式打印出aaa
傳過來的信息。
在express中引入使用
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() 是默認轉發給全部客戶端信息,所有客戶端都可以收到
io.emit("allMsg","廣播 : 歡迎來到聊天室")
})
});
server.listen(3000);
將
server
當作參數傳入,目的在于說明io
掛載的服務依舊是基于http
的。
這里的代碼表示,只要連接成功,就會打印連接成功的信息!
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io(); //默認連接服務端啟動的本地端口地址
socket.emit("message","你好 后臺")
// 監聽服務端的廣播事件,接收廣播的消息
socket.on("allMsg",(msg)=>{
console.log(msg) //廣播 : 歡迎來到聊天室
})
</script>
在客戶端需要單獨引用
socket.io.js
文件,因為socket.io不是瀏覽器內置模塊,需要單獨引用,js文件內部代碼 ==> socket.io.js內部代碼,將這里的代碼復制到自己創建的js文件中,然后在客戶端中引用。
只要在客戶端中出現const socket = io()
,瀏覽器將會直接默認連接到客戶端啟動的本地服務地址。
“node中怎么優雅使用Socket.IO模塊”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。