socket.io加入/离开

Ben*_*oft 16 socket.io

我在socket.io wiki上寻找使用房间,但是加入和离开都不起作用,我想知道他们是否可能改变了一些但没有机会更新维基?

socket.join("room-"+data.meid);
socket.leave("room-"+meid);
Run Code Online (Sandbox Code Playgroud)

因为我得到控制台错误:

Uncaught TypeError: Object #<SocketNamespace> has no method 'leave' 
Uncaught TypeError: Object #<SocketNamespace> has no method 'join' 
Run Code Online (Sandbox Code Playgroud)

Gar*_*ows 55

看起来你在客户端有socket.join.它是服务器端功能.

把它放在服务器上:

io.sockets.on('connection', function (socket) {

    socket.on('subscribe', function(data) { socket.join(data.room); })

    socket.on('unsubscribe', function(data) { socket.leave(data.room); })

});

setInterval(function(){
    io.sockets.in('global').emit('roomChanged', { chicken: 'tasty' });
}, 1000);
Run Code Online (Sandbox Code Playgroud)

这在客户端:

var socket = io.connect();

socket.emit("subscribe", { room: "global" });

socket.on("roomChanged", function(data) {
    console.log("roomChanged", data);
});
Run Code Online (Sandbox Code Playgroud)

  • 您能解释一下setInterval()函数的作用及其用途吗?我正在读它,因为“每1秒钟就会向所有客户发送消息(在一个名为global的房间中),名为roomChanged,并带有值鸡肉:好吃的东西,但我不知道会实现什么。 (2认同)

Aid*_*anc 21

您可能没有正确声明'套接字',或者您没有正确安装Socket-io.试试以下......

var io = require("socket.io");

var socket = io.listen(80);

socket.join('room');

socket.leave('room');
Run Code Online (Sandbox Code Playgroud)

有一个有用的可执行的例子在这里.

  • 这个答案是错误的,请看下面的回答 (10认同)