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

node.js中Socket.IO的進(jìn)階使用技巧

 更新時(shí)間:2014年11月04日 12:52:10   投稿:junjie  
這篇文章主要介紹了node.js中Socket.IO的進(jìn)階使用技巧,本文講解了配置、房間、事件、授權(quán)等內(nèi)容,需要的朋友可以參考下

在上一篇博文Socket.IO中,我簡要介紹了Socket.IO的基本使用方法并創(chuàng)建了一個(gè)簡單的聊天室DEMO。本篇在入門篇的基礎(chǔ)上,繼續(xù)探討Socket.IO的進(jìn)階用法。本篇將從配置、房間、事件等方面入手,介紹一些Socket.IO中實(shí)用的API和注意事項(xiàng)。

1. 配置

Socket.IO提供了4個(gè)配置的API:io.configure, io.set, io.enable, io.disable。其中io.set對單項(xiàng)進(jìn)行設(shè)置,io.enable和io.disable用于單項(xiàng)設(shè)置布爾型的配置。io.configure可以讓你對不同的生產(chǎn)環(huán)境(如devlopment,test等等)配置不同的參數(shù)。以下定義了development和release兩種環(huán)境下Socket.IO的不同配置:

復(fù)制代碼 代碼如下:

var io = require('socket.io').listen(80);

io.configure('development', function(){
    io.enable('browser client etag');
    io.set('log level', 1);
});

io.configure('release', function(){
    io.set('transports', ['websocket']);
});

下面列舉一些常用的配置項(xiàng),具體配置參數(shù)參見官方WIKI

1).transports(默認(rèn)['websocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']):一個(gè)包含通信方法類型的數(shù)組。Socket.IO支持多種實(shí)現(xiàn)在線即時(shí)通信的方式,如websocket、polling等等,該配置能讓你自行選擇備用的通信方式。
2).log level(默認(rèn)3):日志輸出的最低級別,0為error,1為warn,2為info,3為debug,默認(rèn)即輸出所有類型的日志。
3).heartbeat interval(默認(rèn)25秒):心跳包發(fā)送間隔,客戶端需要在此時(shí)間段之內(nèi)向服務(wù)器發(fā)送一個(gè)心跳包才能保持通信。

2. 房間

房間是Socket.IO提供的一個(gè)非常好用的功能。房間相當(dāng)于為指定的一些客戶端提供了一個(gè)命名空間,所有在房間里的廣播和通信都不會影響到房間以外的客戶端。

在入門篇中,我們知道socket.join('room name')可用于客戶端進(jìn)入房間,socket.leave('room name')用于離開房間。當(dāng)客戶端進(jìn)入一個(gè)房間之后,可以通過以下兩種方式在房間里廣播消息:

復(fù)制代碼 代碼如下:

//1. 向my room廣播一個(gè)事件,提交者會被排除在外(即不會收到消息)
io.sockets.on('connection', function (socket) {
    //注意:和下面對比,這里是從客戶端的角度來提交事件
    socket.broadcast.to('my room').emit('event_name', data);
}

//2. 向another room廣播一個(gè)事件,在此房間所有客戶端都會收到消息
//注意:和上面對比,這里是從服務(wù)器的角度來提交事件
io.sockets.in('another room').emit('event_name', data);

//向所有客戶端廣播
io.sockets.emit('event_name', data);

除了向房間廣播消息之外,還可以通過以下API來獲取房間的信息。

復(fù)制代碼 代碼如下:

//獲取所有房間的信息
//key為房間名,value為房間名對應(yīng)的socket ID數(shù)組
io.sockets.manager.rooms

//獲取particular room中的客戶端,返回所有在此房間的socket實(shí)例
io.sockets.clients('particular room')

//通過socket.id來獲取此socket進(jìn)入的房間信息
io.sockets.manager.roomClients[socket.id]

3. 事件

Socket.IO內(nèi)置了一些默認(rèn)事件,我們在設(shè)計(jì)事件的時(shí)候應(yīng)該避開默認(rèn)的事件名稱,并靈活運(yùn)用這些默認(rèn)事件。

服務(wù)器端事件:

1).io.sockets.on('connection', function(socket) {}):socket連接成功之后觸發(fā),用于初始化
socket.on('message', function(message, callback) {}):客戶端通過socket.send來傳送消息時(shí)觸發(fā)此事件,message為傳輸?shù)南?,callback是收到消息后要執(zhí)行的回調(diào)
2).socket.on('anything', function(data) {}):收到任何事件時(shí)觸發(fā)
3).socket.on('disconnect', function() {}):socket失去連接時(shí)觸發(fā)(包括關(guān)閉瀏覽器,主動斷開,掉線等任何斷開連接的情況)

客戶端事件:

1).connect:連接成功
2).connecting:正在連接
3).disconnect:斷開連接
4).connect_failed:連接失敗
5).error:錯(cuò)誤發(fā)生,并且無法被其他事件類型所處理
6).message:同服務(wù)器端message事件
7).anything:同服務(wù)器端anything事件
8).reconnect_failed:重連失敗
9).reconnect:成功重連
10).reconnecting:正在重連

在這里要提下客戶端socket發(fā)起連接時(shí)的順序。當(dāng)?shù)谝淮芜B接時(shí),事件觸發(fā)順序?yàn)椋篶onnecting->connect;當(dāng)失去連接時(shí),事件觸發(fā)順序?yàn)椋篸isconnect->reconnecting(可能進(jìn)行多次)->connecting->reconnect->connect。

4. 授權(quán)

1).向所有客戶端廣播:socket.broadcast.emit('broadcast message');

2).進(jìn)入一個(gè)房間(非常好用!相當(dāng)于一個(gè)命名空間,可以對一個(gè)特定的房間廣播而不影響在其他房間或不在房間的客戶端):socket.join('your room name');

3).向一個(gè)房間廣播消息(發(fā)送者收不到消息):socket.broadcast.to('your room name').emit('broadcast room message');

4).向一個(gè)房間廣播消息(包括發(fā)送者都能收到消息)(這個(gè)API屬于io.sockets):io.sockets.in('another room name').emit('broadcast room message');

5).強(qiáng)制使用WebSocket通信:(客戶端)socket.send('hi'),(服務(wù)器)用socket.on('message', function(data){})來接收。

Socket.IO的進(jìn)階用法介紹基本就到這里。個(gè)人感覺在日常使用的時(shí)候這些基本API已經(jīng)夠用了,這也體現(xiàn)了Socket.IO極其簡潔易用的設(shè)計(jì)哲學(xué)。本文只是拋磚引玉,當(dāng)在實(shí)際運(yùn)用中遇到解決不了的問題時(shí),再去查看官方詳細(xì)的WIKI會比較好。

相關(guān)文章

  • 如何構(gòu)建一個(gè)?NodeJS?影院微服務(wù)并使用?Docker?部署

    如何構(gòu)建一個(gè)?NodeJS?影院微服務(wù)并使用?Docker?部署

    微服務(wù)是一個(gè)單獨(dú)的自包含單元,與其他許多單元一起構(gòu)成一個(gè)大型應(yīng)用程序,這篇文章主要介紹了如何構(gòu)建一個(gè)NodeJS影院微服務(wù)并使用Docker部署,在這個(gè)系列中,將構(gòu)建一個(gè) NodeJS 微服務(wù),并使用 Docker Swarm 集群進(jìn)行部署,需要的朋友可以參考下
    2023-08-08
  • nodeJS中關(guān)于path.resolve()的用法解析

    nodeJS中關(guān)于path.resolve()的用法解析

    這篇文章主要介紹了nodeJS中關(guān)于path.resolve()的用法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 解決nodejs報(bào)錯(cuò)Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘

    解決nodejs報(bào)錯(cuò)Error:EPERM:operation not permitted,mkdi

    這篇文章主要介紹了解決nodejs報(bào)錯(cuò)Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • NodeJs版本過高無法啟動Vue項(xiàng)目報(bào)錯(cuò)的幾種解決方法

    NodeJs版本過高無法啟動Vue項(xiàng)目報(bào)錯(cuò)的幾種解決方法

    在開發(fā)vue項(xiàng)目時(shí),我們通常使用nodejs作為項(xiàng)目的運(yùn)行環(huán)境,但是有時(shí)候,由于nodejs版本過高,可能會導(dǎo)致vue項(xiàng)目啟動報(bào)錯(cuò),這篇文章主要給大家介紹了關(guān)于NodeJs版本過高無法啟動Vue項(xiàng)目報(bào)錯(cuò)的幾種解決方法,需要的朋友可以參考下
    2023-12-12
  • 微信小程序搭載node.js服務(wù)器的簡單教程

    微信小程序搭載node.js服務(wù)器的簡單教程

    小程序是一種全新的連接用戶與服務(wù)的方式,它可以在微信內(nèi)被便捷地獲取和傳播,同時(shí)具有出色的使用體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于微信小程序搭載node.js服務(wù)器的簡單教程,需要的朋友可以參考下
    2022-12-12
  • nodejs微信開發(fā)之接入指南

    nodejs微信開發(fā)之接入指南

    這篇文章主要介紹了nodejs微信開發(fā)之接入指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 一文學(xué)會搭建HTTP服務(wù)器調(diào)用DLL庫

    一文學(xué)會搭建HTTP服務(wù)器調(diào)用DLL庫

    這篇文章主要為大家介紹了一文學(xué)會搭建HTTP服務(wù)器調(diào)用DLL庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Nodejs處理異常操作示例

    Nodejs處理異常操作示例

    這篇文章主要介紹了Nodejs處理異常操作,結(jié)合實(shí)例形式分析了nodejs針對異常的捕獲與處理相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • 關(guān)于npm?i幾種常見命令的區(qū)別詳解

    關(guān)于npm?i幾種常見命令的區(qū)別詳解

    npm(Node.js Package Manager)是一個(gè)Node.js的包管理工具,用來解決Node.js代碼部署問題,下面這篇文章主要給大家介紹了關(guān)于npm?i幾種常見命令的那點(diǎn)事,需要的朋友可以參考下
    2023-03-03
  • 你所未知的3種Node.js代碼優(yōu)化方式

    你所未知的3種Node.js代碼優(yōu)化方式

    這篇文章主要為大家介紹了3種你所未知的Node.js代碼優(yōu)化方式,幫助大家剛好的進(jìn)行代碼優(yōu)化,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評論

兴义市| 怀化市| 九龙县| 惠东县| 长白| 图木舒克市| 普陀区| 北川| 迁西县| 安多县| 岑巩县| 荔波县| 会泽县| 武邑县| 枣强县| 和静县| 怀集县| 甘泉县| 宁远县| 疏附县| 洮南市| 讷河市| 襄汾县| 四平市| 鄂托克旗| 襄樊市| 龙州县| 阳西县| 班玛县| 东安县| 定边县| 德兴市| 上饶市| 方山县| 安国市| 抚松县| 石首市| 三门峡市| 郧西县| 岢岚县| 涿鹿县|