在 socket.io 中检测名称空间更改
detect namespace change in socket.io
我正在用 express 和 socket.io 编写一个 nodeJS 0.12 应用程序。
我从一个小应用程序开始。用户连接到 socket.io 并看到一个按钮 'join_room',该按钮实际上将用户连接到 room\namespace 'a_b_c'.
所以客户端的javascript代码很简单:
可变套接字;
$(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 变量。有什么想法吗?
我认为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:"..."});
})
});
我正在用 express 和 socket.io 编写一个 nodeJS 0.12 应用程序。
我从一个小应用程序开始。用户连接到 socket.io 并看到一个按钮 'join_room',该按钮实际上将用户连接到 room\namespace 'a_b_c'.
所以客户端的javascript代码很简单:
可变套接字;
$(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 变量。有什么想法吗?
我认为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:"..."});
})
});