麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

node.js中Socket.IO的進階使用技巧

2019-11-20 13:57:41
字體:
供稿:網(wǎng)友

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

1. 配置

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

復制代碼 代碼如下:

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']);
});

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

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

2. 房間

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

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

復制代碼 代碼如下:

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

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

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

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

復制代碼 代碼如下:

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

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

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

3. 事件

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

服務器端事件:

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

客戶端事件:

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

在這里要提下客戶端socket發(fā)起連接時的順序。當?shù)谝淮芜B接時,事件觸發(fā)順序為:connecting->connect;當失去連接時,事件觸發(fā)順序為:disconnect->reconnecting(可能進行多次)->connecting->reconnect->connect。

4. 授權(quán)

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

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

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大号bbwassbigav头交 | 免费国产在线视频 | 一区二区三区视频在线播放 | 精品中文字幕视频 | 丰满年轻岳中文字幕一区二区 | 欧美综合成人 | 成人羞羞视频在线观看免费 | 久久久三级免费电影 | 国产日韩亚洲 | 久久免费综合视频 | 国产一区二区三区四区波多野结衣 | 亚洲综合中文 | 欧美日韩国产成人在线 | 欧美精品一级 | 91九色精品 | 欧美大穴 | 怦然心动50免费完整版 | 欧美无限资源 | 一区二区三级视频 | www.91成人| 免费观看黄色一级视频 | 欧美一级成人一区二区三区 | 国产成人高清在线观看 | www.99av| 成人三级电影在线 | 黄色网址在线视频 | 狠狠操操| 久久久久久久91 | 欧美成人综合视频 | 在线亚洲播放 | 欧美中文在线 | 人成免费a级毛片 | 国产精品视频成人 | 国产激情视频在线 | 国产99一区二区 | 污片视频在线观看 | 免费播放欧美毛片 | 国产一区二区三区四区精 | 九九热视频免费在线观看 | 麻豆视频观看 | fc2成人免费人成在线观看播放 |