检测socket.io中的命名空间更改

时间:2015-02-16 12:29:50

标签: node.js socket.io

我正在使用express和socket.io编写nodeJS 0.12应用程序。

我从一个小应用开始。用户连接到socket.io并看到一个按钮'join_room',它实际上将用户连接到room \ namespace'a_b_c'。

所以客户端上的javascript代码很简单:

var socket;

$(function () {
 socket = io();
  $('#join_room_button').click(function () {
    socket.emit("change_room","/a_b_c");
  });
});

所以我有一个按钮,onclick会发出带有房间名称的“change_room”。

在服务器端我有以下代码:

var io = require('socket.io')(server);
io.on('connection', function (socket) {
 console.log('user connected to socket.io');
  socket.on('change_room', function (data) {
    console.log("change room request to " + data);
    socket.join(data);
  })
});
var nsp = io.of('/a_b_c');
nsp.on('connection', function (socket) {
 console.log("someone connected to room a_b_c");
});

所以你可以在这里看到我抓住了一个连接,并检查是否发出'change_room',如果是,我将用户加入他要求的房间。 在该代码下方,我检查连接到同一个房间。

问题是当用户连接到房间'/ a_b_c'时我无法捕捉到。 即使客户点击change_room,信号或事件也不会发生。

表示客户端看到输出:change room request to /a_b_c 但是从不调用具有连接的nsp变量。任何想法?

1 个答案:

答案 0 :(得分:1)

我认为对io.of的使用存在误解,也许你可以在下面的问题中查看所选答案的例子;

io.of('namespace').emit('event', message) not working with namespace in socket.io

它会侦听特定的命名空间,但如果您尝试宣布有人加入某个特定的房间,您可以将下面的事件发送给加入的新房间客户端;

var io = require('socket.io')(server);
io.on('connection', function (socket) {
 console.log('user connected to socket.io');
  socket.on('change_room', function (data) {
    console.log("change room request to " + data);
    socket.join(data);
    io.sockets.in(data).emit('user_joined', {msg: "...", user:"..."});
  })
});