房间(频道)
// 加入房间
socket.join('some room');
// 离开房间
socket.leave('some room');
// 获取所有房间的信息
// key为房间名,value为房间名对应的socket ID数组
io.sockets.manager.rooms
// 获取particular room中的客户端,返回所有在此房间的socket实例
io.sockets.clients('particular room')
// 通过sid获取所有进入的房间
io.sockets.manager.roomClients[socket.id]
发送易变(volatile)的数据
volatile意思大概是说,当服务器发送数据时,客户端因为各种原因不能正常接收,比如网络问题、或者正处于长连接的建立连接阶段。此时会让我们的应用变得 suffer,那就需要考虑发送 volatile 数据。
socket.volatile.emit('bieber tweet', tweet);
即使客户端没连线,一样可以这样发送,服务器会自动丢弃发送失败的数据。
获取cookies和header的方式
socket.request
socket.request指向http的request,所以可以获取cookies和header
中间件
var io = require('socket.io')();
io.on('connection', function(socket){
socket.use(function(packet, next){
if (packet.doge === true) return next();
next(new Error('Not a doge error'));
});
});
socket.use可以注册一个中间件,那么任何发送来的包都会被中间件预先处理
如果next带上错误信息,那么就会直接返给clinet
否则可以进入下一步的处理
客户端建立一个socket连接
var socket = io("ws://103.31.201.154:5555");
客户端socket.on()监听的事件:
connect:连接成功
connecting:正在连接
disconnect:断开连接
connect_failed:连接失败
error:错误发生,并且无法被其他事件类型所处理
message:同服务器端message事件
anything:同服务器端anything事件
reconnect_failed:重连失败
reconnect:成功重连
reconnecting:正在重连
当 第一次连接时,事件触发顺序为:connecting->connect;当失去连接时,事件触发顺序 为:disconnect->reconnecting(可能进行多 次)->connecting->reconnect->connect。