socket.io 加入/离开

22

我正在查看socket.io的维基页面,想使用rooms功能,但是join和leave似乎无法正常工作,我在想他们是否更改了一些事情,但还没有更新维基页面?

socket.join("room-"+data.meid);
socket.leave("room-"+meid);

因为我收到了控制台错误:

Uncaught TypeError: Object #<SocketNamespace> has no method 'leave' 
Uncaught TypeError: Object #<SocketNamespace> has no method 'join' 

请在此处查看我的答案:https://dev59.com/n1sW5IYBdhLWcg3wfXX6#66251445 - DragonFire
2个回答

65

看起来你在客户端使用了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);

并且这是客户端上的:

var socket = io.connect();

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

socket.on("roomChanged", function(data) {
    console.log("roomChanged", data);
});

3
setInterval()函数的作用是定时重复执行一个指定的代码块。你看到的代码意思是每1秒向所有客户端(在一个名为"global"的房间中)发送一个名为"roomChanged"且值为"chicken: tasty"的消息,但我不确定这会实现什么目的。 - user1063287
是的,这就是它的作用。可能只是为了ping客户端。 - GeekPeek
请问这个能否帮助从Mysql数据库实时获取数据并在UI中显示?这样是否可以避免每秒运行一次的SetInterval? - Blessy Julie

30

你可能没有正确声明“socket”,或者你没有正确安装Socket-io。请尝试以下方法...

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

var socket = io.listen(80);

socket.join('room');

socket.leave('room');

这里有一个有用的可执行示例,在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接