socket建立连接
var socket = io.connect();//与服务器进行连接
socket.emit('event', data);//向服务器发送一个名为event的事件和数据data
socket.on('event', function () {...});//监听服务器返回的事件,对返回的数据进行处理
命名空间
命名空间着实是一个非常实用好用的功能。我们可以通过命名空间,划分出不同的房间,在房间里的广播和通信都不会影响到房间以外的客户端。
在服务端,通过of("")的方式来划分新的命名空间:
io.of('chat').on('connection',function(socket){...});
示例中,我们创建一个名为chat的房间,客户端可以通过如下方式连接到指定的房间:
var socket = io.connect('/chat');
虽然连接到指定的房间,但是我们也可以在服务端操作,自由的进出房间:
socket.join('chat');//进入chat房间
socket.leave('chat');//离开chat房间
广播消息
‘全局广播’,所有连接到服务器的客户端都会受到广播的信息:
socket.broadcast.emit('DATA',data);//除自己以外的所有人
有的广播信息只发送给一部分客户端,比如某个房间里面的用户,那么可以使用如下方式:
socket.broadcast.to('chat').emit('DATA',data);//不包括自己
io.sockets.in('chat').emit('event_name', data);//包括自己
当使用to()的方式广播信息时,只有该命名空间下的客户端才会收到广播信息
传递参数
var socket = io.connect('/',{_query:'sid=123456'});
在服务端可以这样获取到传递的参数:
io.use(function(socket){
var query = socket.request._query;
var sid = query.sid;
});
客户端传递的参数已经被解析成了一个json对象,这个对象就是_query。
服务器端
io.on('connection',function(socket)); //监听客户端连接,回调函数会传递本次连接的socket
io.sockets.emit('String',data); //给所有客户端广播消息
io.sockets.socket(socketid).emit('String', data); //给指定的客户端发送消息
socket.on('String',function(data)); //监听客户端发送的信息
socket.emit('String', data); //给该socket的客户端发送消息
io.sockets.clients().forEach(function (socket) {
//.....
}); //获取客户端socket
io.sockets.manager.rooms //获取所有房间(分组)信息
io.sockets.manager.roomClients[socket.id] //来获取此socketid进入的房间信息
io.sockets.clients('particular room') //获取particular room中的客户端,返回所有在此房间的socket实例