socket.io 加入/离开

Posted

技术标签:

【中文标题】socket.io 加入/离开【英文标题】:socket.io join/leave 【发布时间】:2013-04-01 08:21:35 【问题描述】:

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

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' 

【问题讨论】:

请在此处查看我的答案:***.com/a/66251445/3904109 【参考方案1】:

看起来您在客户端有 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);
);

【讨论】:

您能否解释一下setInterval() 函数的作用及其用途?我正在阅读它为every 1 second send a message to all clients (in a room called global?) called roomChanged with the value chicken: tasty,但我不明白这会实现什么。 是的,它就是这么做的。可能只是为了 ping 客户端 你能否解释一下这有助于从 mysql db 获取数据并在 UI 中显示它?这会避免运行 1 秒的 SetInterval 吗?【参考方案2】:

您可能没有正确声明“套接字”,或者您没有正确安装 Socket-io。试试下面...

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

var socket = io.listen(80);

socket.join('room');

socket.leave('room');

有一个有用的可执行示例here。

【讨论】:

以上是关于socket.io 加入/离开的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flask 和 Socket.io 加入和离开房间的简明示例?

socket.io 入门篇

一次加入多个房间 Socket.io

socket.io多房间聊天

我怎样才能得到一个 socket.username ? (socket.io)

Socket.io 如何判断某人何时离开