【问题标题】:detect namespace change in socket.io检测 socket.io 中的命名空间变化
【发布时间】:2015-04-16 23:13:42
【问题描述】:

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

我从一个小应用开始。用户连接到 socket.io 并看到一个按钮“join_room”,该按钮实际上将用户加入到房间\命名空间“a_b_c”。

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

var 套接字;

$(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 变量。有什么想法吗?

【问题讨论】:

    标签: node.js socket.io


    【解决方案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:"..."});
      })
    });
    

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 2014-09-24
      • 2012-06-11
      • 1970-01-01
      • 2012-10-20
      • 2018-06-10
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      相关资源
      最近更新 更多