Socket.io 让这变得非常简单。它有命名空间和房间。例如,要创建两个不同的命名空间,您可以这样做:
var io = require('socket.io').listen(app, {origins: '*:*', log: false});
var page1 = io.of('/page1').on('connection', function (socket) {
//you can use socket in here
});
var page2 = io.of('/page2').on('connection', function (socket) {
//you can use socket in here
});
您现在有两个命名空间。在每个内部,您都可以侦听事件。例如,如果您发送了一个类型事件:
socket.on('type', function(text){
io.sockets.emit('type', {'whatWasTyped': text]);
}
这将向所有连接的客户端发送一个类型事件。
如果您想进一步分离命名空间,您可以创建房间。以下是如何在命名空间中创建房间:
var page1 = io.of('/page1').on('connection', function (socket) {
socket.on('add', function(area){
socket.join(area);
};
});
每次与要加入的房间建立连接时,您都必须发送添加事件。然后,您可以只向该房间发送消息。
io.of('/users').in(area).emit('event', {'event': yourInfoHere});
您可以通过运行获取有关连接的信息:
socket.get('user', function(err, info){ //in here });
这是我脑海中的一些信息,来自 socket.io wiki:https ://github.com/LearnBoost/socket.io/wiki/Rooms 。
我还没有测试过,如果您还有其他问题,请告诉我。