Socket.IO API Socket
Socket
Socket類繼承自EventEmitter。覆寫了emit方法,保留了EventEmitter的其他方法
socket.id
會話的唯一識別符號,來自於底層的Client
socket.rooms
標識此客戶端所在房間的字串雜湊值,按房間名稱編制索引
socket.client
對底層Client物件的引用。
socket.conn
對底層Client傳輸連線的引用(engine.io Socket物件)
socket.request
一個getter代理,它返回對request發起底層engine.io的引用Client。用於訪問請求標頭,如Cookie或User-Agent。
socket.handshake
請求細節
{
headers: /* 作為握手一部分的請求頭資訊*/,
time: /* 建立時間(as string) */,
address: /* 客戶端ip */,
xdomain: /* 是否跨域 */,
secure: /* 是否為https */,
issued: /* 建立時間 (as unix timestamp) */,
url: /* 請求地址*/,
query: /* 查詢物件 */
}
socket.use(FN)
註冊中介軟體
socket.send([... args] [,ack])
傳送一個message事件
socket.emit(eventName [,... args] [,ack])
觸發一個事件,可以包括任意的引數,支援所有可序列化的引數
ack引數時可選的,將使用客戶端的響應值進行呼叫
io.on('connection', (socket) => { socket.emit('an event', { some: 'data' }); socket.emit('ferret', 'tobi', (data) => { console.log(data); // data will be 'woot' }); // the client code // client.on('ferret', (name, fn) => { // fn('woot'); // }); });
socket.on(eventName, callback)
為給定的事件註冊一個回撥函式
socket.once(eventName, listener) socket.removeListener(eventName, listener) socket.removeAllListeners([eventName]) socket.eventNames()
繼承自EventEmitter
socket.join(room[, callback])
將客戶端新增到room,並可選擇觸發帶err簽名的回撥(如果有)
連線房間的機制由Server Adapter已配置的
為方便起見,每個套接字自動加入由其id標識的房間,這樣可以輕鬆的廣播訊息到其他套接字
io.on('connection', (socket) => {
socket.on('say to someone', (id, msg) => {
// send a private message to the socket with the given id
socket.to(id).emit('my message', msg);
});
});
socket.join(rooms [,callback])
將客戶端新增到room列表中,並可選擇觸發帶err簽名的回撥(如果有)
socket.leave(room [,callback])
從room中刪除客戶端
socket.leave(room [,callback])
向一個或一系列房間中廣播訊息
socket.to(room) socket.in
io.on('connection', (socket) => {
// to one room
socket.to('others').emit('an event', { some: 'data' });
// to multiple rooms
socket.to('room1').to('room2').emit('hello');
// a private message to another socket
socket.to(/* another socket id */).emit('hey');
// WARNING: `socket.to(socket.id).emit()` will NOT work, as it will send to everyone in the room
// named `socket.id` but the sender. Please use the classic `socket.emit()` instead.
});
socket.compress(value)
value值為真時,壓縮事件資料。預設為true
socket.disconnect(close)
斷開此客戶端。如果close值為ture,則關閉底層連線。否則,只斷開名稱空間
Flag: ‘broadcast’
將事件廣播到除傳送者之外的所有socket
io.on('connection',(socket)=> {
socket.broadcast.emit('an event',{ some:'data' }); //每個人都得到它但傳送者
});
Flag: ‘volatile’ Flag: ‘binary’
類似名稱空間API中的定義
Event: ‘disconnect’
斷開連線時觸發
io.on('connection', (socket) => {
socket.on('disconnect', (reason) => {
// ...
});
});
Event: ‘error’
發生錯誤時觸發
io.on('connection', (socket) => {
socket.on('error', (error) => {
// ...
});
});
Event: ‘disconnecting’
在客戶端將要斷開連線時觸發(但尚未離開rooms)
io.on('connection', (socket) => {
socket.on('disconnecting', (reason) => {
let rooms = Object.keys(socket.rooms);
// ...
});
});
Client
client.conn
對底層engine.io Socket連線的引用。
client.request
一個getter代理,它返回request對origin.io連線的引用。用於訪問請求標頭,如Cookie或User-Agent。