如何按房间自定义socket.io的连接事件?

时间:2014-03-18 00:24:02

标签: node.js socket.io

当套接字连接到socket.io服务器时,会触发connection事件。可以覆盖处理此类事件的函数,以便为连接添加自定义行为。

我想添加一个函数来处理connection事件,但是对于socket.io房间。

我尝试了类似的东西(使用socket.io 0.9.14):

io.sockets.in('someNamespace/someRoom').on('connection', function () {
    //custom actions here
}

但它似乎不起作用。该行为附加到默认连接事件,并在每个连接上触发。

有可能实现我正在尝试的目标吗?有什么建议吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

如果我清楚地理解了您的问题,那么您就是在尝试使用命名空间。然后你应该这样做:

io.of('/someNamespace/someRoom').on('connection', function (socket) {
  //your actions here
});

答案 1 :(得分:0)

可以使用the socket.io 0.9.14 join functionon-connection(或callback)参数模拟房间的类似行为(类似于fn处理程序),就像这样:

socket.join('some/room', function handleJoin () {
    //do something when socket joins to 'some/room'
})

对于0.9.14的版本socket.io,当join函数有第二个参数时,会显示warning,告知:

Client#join callback is deprecated

但对于current one, in the master branch(版本1.0.0-pre),警告不再存在,并且回调函数可用于房间加入时的错误处理。因此,将来依赖这一论证的存在可能是安全的。

最后,通过在join调用上使用包装函数,可以保留调用的闭包,从而提供on connection处理程序通常采用的相同参数。

e.g。 (在服务器内的某些地方)

var someVar = 'some value';
socket.join('some/room', function () {
    handleJoin(someVar);
});

然后somevar将在handleJoin函数中可用(somevar可以是room名称,例如)。当然,这是一个非常简单的示例,它可以适应不同的要求或符合即将推出的join函数版本。

希望这有帮助。