最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node.js中優(yōu)雅的使用Socket.IO模塊的方法

 更新時(shí)間:2022年12月06日 09:10:56   作者:前端小白在前進(jìn)  
Socket.IO是一個(gè)WebSocket庫,包括了客戶端的js和服務(wù)器端的node.js,它的目標(biāo)是構(gòu)建可以在不同瀏覽器和移動(dòng)設(shè)備上使用的實(shí)時(shí)應(yīng)用,這篇文章主要介紹了node.js中優(yōu)雅的使用Socket.IO模塊,需要的朋友可以參考下

??前言

上篇文章中結(jié)合websokcet進(jìn)行了簡(jiǎn)單的聊天小案例,但是我們可以發(fā)現(xiàn)使用ws模塊來寫代碼的時(shí)候未免有一些繁瑣,需要我們自己去設(shè)置type,使用socket.io后事件監(jiān)聽將會(huì)十分的簡(jiǎn)單便捷,很好的彌補(bǔ)了ws模塊的缺陷。

Socket.IO的定義

Socket.IO是一個(gè)WebSocket庫,包括了客戶端的js服務(wù)器端的node.js,它的目標(biāo)是構(gòu)建可以在不同瀏覽器和移動(dòng)設(shè)備上使用的實(shí)時(shí)應(yīng)用。

Socket.IO將WebSocket、AJAX和其它的通信方式全部封裝成了統(tǒng)一的通信接口,也就是說,我們?cè)谑褂肧ocketIO時(shí),不用擔(dān)心兼容問題,底層會(huì)自動(dòng)選用最佳的通信方式

Socket.IO的優(yōu)點(diǎn)

  • socket.io封裝了服務(wù)端和客戶端,使用起來非常簡(jiǎn)單方便。
  • socket.io支持跨平臺(tái),這就意味著你有了更多的選擇,可以在自己喜歡的平臺(tái)下開發(fā)實(shí)時(shí)應(yīng)用。
  • socket.io可以自定義事件發(fā)送到對(duì)端,對(duì)端可以是服務(wù)器,可以是客戶端;使用emit發(fā)送,接收還是on。
  • 它會(huì)自動(dòng)根據(jù)瀏覽器從WebSocket、AJAX長(zhǎng)輪詢、Iframe流等等各種方式中選擇最佳的方式來實(shí)現(xiàn)網(wǎng)絡(luò)實(shí)時(shí)應(yīng)用,非常方便和人性化,而且支持的瀏覽器最低達(dá)IE5.5。如果不支持websocket,可以自動(dòng)降級(jí)為輪詢

node中安裝Socket.IO

打開終端,在終端中輸入以下代碼即可安裝Socket.IO模塊:

npm i socket.io

node中使用Socket.IO

emiton 是最重要的兩個(gè)api,分別對(duì)應(yīng) 發(fā)送監(jiān)聽 事件.

我們可以非常自由的在服務(wù)端定義并發(fā)送一個(gè)事件emit,然后在客戶端監(jiān)聽 on,反過來也一樣。

發(fā)送的內(nèi)容格式也非常自由,既可以是基本數(shù)據(jù)類型 Number,String,Boolean 等,也可以是 Object,Array 類型,甚至還可以是函數(shù)。而用回調(diào)函數(shù)的方式則可以進(jìn)行更便攜的交互。

emit

socket.emit(eventName[, ...args])發(fā)射(觸發(fā))一個(gè)事件

socket.emit('aaa','你好,前臺(tái)')

在這里以服務(wù)端為例子:在服務(wù)端中通過socket.emit()方法創(chuàng)立一個(gè)事件(第一個(gè)參數(shù):自定義事件)aaa,發(fā)送的信息(第二個(gè)參數(shù)) 你好,前臺(tái).

注意: 第二個(gè)參數(shù)可以傳對(duì)象,因?yàn)樵?code>emit方法內(nèi)部帶有JSON.stringfy()方法,自動(dòng)將對(duì)象轉(zhuǎn)化為字符串。

on

socket.on(eventName, callback)監(jiān)聽一個(gè) 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)  //你好 后臺(tái)
		//注意 : 這里的 io.emit() 是默認(rèn)轉(zhuǎn)發(fā)給全部客戶端信息,所有客戶端都可以收到
		io.emit("allMsg","廣播 : 歡迎來到聊天室")
	})
});
server.listen(3000);

server當(dāng)作參數(shù)傳入,目的在于說明io掛載的服務(wù)依舊是基于http的。
這里的代碼表示,只要連接成功,就會(huì)打印連接成功的信息!

客戶端

<script src="/socket.io/socket.io.js"></script>
<script>
  const socket = io();  //默認(rèn)連接服務(wù)端啟動(dòng)的本地端口地址
  socket.emit("message","你好 后臺(tái)")
  // 監(jiān)聽服務(wù)端的廣播事件,接收廣播的消息
  socket.on("allMsg",(msg)=>{
		console.log(msg)  //廣播 : 歡迎來到聊天室
  })
</script>

在客戶端需要單獨(dú)引用socket.io.js文件,因?yàn)閟ocket.io不是瀏覽器內(nèi)置模塊,需要單獨(dú)引用,js文件內(nèi)部代碼 ==> socket.io.js內(nèi)部代碼,將這里的代碼復(fù)制到自己創(chuàng)建的js文件中,然后在客戶端中引用。
只要在客戶端中出現(xiàn)const socket = io(),瀏覽器將會(huì)直接默認(rèn)連接到客戶端啟動(dòng)的本地服務(wù)地址。

小結(jié)

socket.io這個(gè)第三方模塊相對(duì)來說,書寫代碼的時(shí)候更加的方便與高效,在ws模塊中通過switch分支來進(jìn)行對(duì)不同的聊天類型進(jìn)行不同的方法呈現(xiàn),而在socket.io模塊中僅僅通過自定義事件就可以解決這個(gè)問題,并且socket.io可以在服務(wù)器斷開后,當(dāng)你再次進(jìn)入客戶端后可以自動(dòng)連接,整體的表現(xiàn)優(yōu)于ws模塊。

到此這篇關(guān)于node.js中優(yōu)雅的使用Socket.IO模塊的文章就介紹到這了,更多相關(guān)node.js使用Socket.IO模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Node.js中的異步生成器與異步迭代詳解

    Node.js中的異步生成器與異步迭代詳解

    這篇文章主要給大家介紹了關(guān)于Node.js中異步生成器與異步迭代的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Nodejs中的require函數(shù)的具體使用方法

    Nodejs中的require函數(shù)的具體使用方法

    這篇文章主要介紹了Nodejs中的require函數(shù)的具體使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-04-04
  • node.js三個(gè)步驟實(shí)現(xiàn)一個(gè)服務(wù)器及Express包使用

    node.js三個(gè)步驟實(shí)現(xiàn)一個(gè)服務(wù)器及Express包使用

    這篇文章主要介紹了node.js三個(gè)步驟實(shí)現(xiàn)一個(gè)服務(wù)器及Express包使用,文章通過新建一個(gè)文件展開全文內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • node.js發(fā)送郵件email的方法詳解

    node.js發(fā)送郵件email的方法詳解

    這篇文章主要介紹了node.js發(fā)送郵件email的方法,結(jié)合實(shí)例形式詳細(xì)分析了node.js發(fā)送郵件的原理、操作步驟、注意事項(xiàng)及常見問題解決方法,需要的朋友可以參考下
    2017-01-01
  • VSCode launch.json配置詳細(xì)教程

    VSCode launch.json配置詳細(xì)教程

    這篇文章主要介紹了vscode 的node.js debugger 的 launch.json 配置詳情,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • node檢測(cè)端口可用性的實(shí)踐示例

    node檢測(cè)端口可用性的實(shí)踐示例

    本文主要介紹了node檢測(cè)端口可用性的實(shí)踐示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 利用node.js寫一個(gè)爬取知乎妹紙圖的小爬蟲

    利用node.js寫一個(gè)爬取知乎妹紙圖的小爬蟲

    這篇文章主要給大家介紹了利用node.js寫一個(gè)爬取知乎妹紙圖的小爬蟲,文中給出了詳細(xì)的示例代碼和介紹,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-05-05
  • Grunt針對(duì)靜態(tài)文件的壓縮,版本控制打包的實(shí)例講解

    Grunt針對(duì)靜態(tài)文件的壓縮,版本控制打包的實(shí)例講解

    下面小編就為大家?guī)硪黄狦runt針對(duì)靜態(tài)文件的壓縮,版本控制打包的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Node.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實(shí)例講解)

    Node.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實(shí)例講解)

    下面小編就為大家?guī)硪黄狽ode.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Node.js之HTTP服務(wù)端和客戶端實(shí)現(xiàn)方式

    Node.js之HTTP服務(wù)端和客戶端實(shí)現(xiàn)方式

    這篇文章主要介紹了Node.js之HTTP服務(wù)端和客戶端實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09

最新評(píng)論

井研县| 高碑店市| 古丈县| 灵台县| 阿坝| 旅游| 松潘县| 青海省| 油尖旺区| 临汾市| 海门市| 东宁县| 上犹县| 陵水| 大竹县| 乐东| 嫩江县| 岗巴县| 高台县| 陵川县| 临安市| 忻城县| 松阳县| 乳山市| 东乌珠穆沁旗| 潜山县| 龙海市| 噶尔县| 万山特区| 廊坊市| 六枝特区| 偏关县| 米泉市| 民和| 社会| 贵港市| 固镇县| 瓮安县| 明光市| 和平县| 西乡县|