1. 程式人生 > >Socket.IO API Socket

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。