亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 13:57:41
字體:
來源:轉載
供稿:網友

在上一篇博文Socket.IO中,我簡要介紹了Socket.IO的基本使用方法并創建了一個簡單的聊天室DEMO。本篇在入門篇的基礎上,繼續探討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可以讓你對不同的生產環境(如devlopment,test等等)配置不同的參數。以下定義了development和release兩種環境下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']);
});

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

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

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數組
io.sockets.manager.rooms

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

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

3. 事件

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

服務器端事件:

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

客戶端事件:

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

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

4. 授權

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

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

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

4).向一個房間廣播消息(包括發送者都能收到消息)(這個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已經夠用了,這也體現了Socket.IO極其簡潔易用的設計哲學。本文只是拋磚引玉,當在實際運用中遇到解決不了的問題時,再去查看官方詳細的WIKI會比較好。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区私人高清影院| 欧美激情精品久久久久| 久久夜色精品国产亚洲aⅴ| 亚洲石原莉奈一区二区在线观看| 欧美日韩精品在线视频| 午夜精品一区二区三区在线播放| 国产精品69精品一区二区三区| 国产精品69久久| 久久99久久99精品免观看粉嫩| 在线精品播放av| 欧美在线www| 国产亚洲欧洲黄色| 亚洲美女精品久久| 欧美成aaa人片免费看| 色无极影院亚洲| 欧美精品久久一区二区| 亚洲在线观看视频网站| 国产精品一区二区女厕厕| 欧美午夜片在线免费观看| 在线观看国产精品日韩av| 91爱视频在线| 一本色道久久88亚洲综合88| 日韩免费观看网站| 欧美成人剧情片在线观看| 欧美福利视频在线观看| 福利视频一区二区| 欧美一区二区三区四区在线| 国产精品扒开腿爽爽爽视频| 欧美激情一区二区三级高清视频| 成人国产在线视频| 日韩av影院在线观看| 91在线观看免费| 91沈先生在线观看| www.欧美精品一二三区| 亚洲美女性视频| 日韩av男人的天堂| 国产一区二区在线免费视频| 成人免费视频97| 成人av资源在线播放| 98午夜经典影视| 91精品视频观看| 亚洲毛片在线观看| 国产suv精品一区二区| 精品亚洲一区二区三区| 亚洲欧美日韩中文在线制服| 国产精品久久久久999| 国产精品第100页| 久久精品成人欧美大片古装| 国产精品久久久久久久av电影| 最近日韩中文字幕中文| 欧美日韩免费看| 亚洲国产天堂网精品网站| 91在线免费网站| 亚洲精品久久久久久久久久久久| 亚洲成人av片在线观看| 亚洲福利在线看| 国产精品午夜一区二区欲梦| 色狠狠av一区二区三区香蕉蜜桃| 欧美在线视频免费| 欧美极品少妇xxxxx| 狠狠躁天天躁日日躁欧美| 97超级碰碰人国产在线观看| 国产97在线|亚洲| 欧美人成在线视频| 久久精品亚洲国产| 国产精品福利在线| 亚洲女人被黑人巨大进入al| 91精品国产综合久久香蕉的用户体验| 国产精品嫩草影院一区二区| 久久中文字幕国产| 在线观看不卡av| 亚洲а∨天堂久久精品9966| 另类美女黄大片| 北条麻妃在线一区二区| 91视频免费网站| 亚洲电影免费观看高清完整版| 欧美激情第一页xxx| 91夜夜未满十八勿入爽爽影院| 伊人久久久久久久久久| 91香蕉嫩草神马影院在线观看| 91人成网站www| 欧美丝袜一区二区三区| 欧美丝袜一区二区| 精品免费在线视频| 日韩有码在线观看| 国产欧美日韩丝袜精品一区| 国产午夜精品一区二区三区| 亚洲精品电影在线| 久久视频免费在线播放| 久久久精品一区二区三区| 韩国美女主播一区| 亚洲韩国日本中文字幕| 国产日韩欧美电影在线观看| 国产一区二区三区在线看| 久久6免费高清热精品| 欧美黑人国产人伦爽爽爽| 亚洲v日韩v综合v精品v| 日韩免费精品视频| 热re91久久精品国99热蜜臀| 亚洲欧洲国产伦综合| 一区二区三区在线播放欧美| 国产精品第三页| 91在线精品播放| 欧美精品videossex88| 日韩黄色在线免费观看| 欧美成人激情视频| 久久天天躁狠狠躁夜夜av| 中文字幕欧美在线| 91av中文字幕| 欧美视频精品一区| 色婷婷久久一区二区| 日韩在线观看高清| 91精品国产高清久久久久久91| 91av在线网站| 91久久久久久久久久| 91精品在线观看视频| 国产啪精品视频网站| 成人精品福利视频| 热草久综合在线| 欧美激情一区二区三级高清视频| 欧美激情第99页| 欧美精品久久久久久久久| 欧美精品第一页在线播放| 色综合久久88色综合天天看泰| 国产在线观看不卡| 欧美最猛黑人xxxx黑人猛叫黄| 欧美大片在线免费观看| 欧美性猛交xxxx乱大交极品| 91九色综合久久| 国产精品一久久香蕉国产线看观看| 成人黄色网免费| 亚洲自拍在线观看| 欧美激情性做爰免费视频| 97视频在线观看免费高清完整版在线观看| 国产精品久久久久久久av大片| 久久夜色精品国产亚洲aⅴ| 亚洲国产日韩一区| 亚洲天堂av在线免费观看| 亚洲四色影视在线观看| 久久久噜噜噜久久| 日韩免费观看在线观看| 这里只有精品在线播放| 国外成人在线播放| 亚洲人成五月天| 中文字幕精品影院| 91久久精品日日躁夜夜躁国产| 成人观看高清在线观看免费| 国产丝袜精品视频| 亚洲精品不卡在线| 国产日韩欧美成人| 91久久精品日日躁夜夜躁国产| 国产欧美在线播放| 欧美性69xxxx肥| 中文综合在线观看| 国产精品电影一区| 国产精品h在线观看| 日韩电影网在线| 国产va免费精品高清在线观看| 亚洲天堂男人的天堂| 久热精品视频在线| 久久久久免费精品国产| 欧美性猛交xxxx富婆| 国产成人在线亚洲欧美| 日韩美女av在线免费观看|