当前位置: 首页 > 知识库问答 >
问题:

socket.io加入一个房间将注册该房间,但只加入一个空字符串房间

傅越
2023-03-14

我使用的是socket.io/node.js/express。当我使用socket.join(“room”)加入socket.io房间时,它会注册该房间,但用户只加入“room”。

这个命令显示了所有的房间,它同时返回'room'和'',尽管我从未创建过'room:

console.log(io.sockets.manager.rooms); // ['room', '']
console.log(io.sockets.manager.roomClients[socket.id]); // ['']
io.sockets.in(data.chatroom).emit('broadcast_message',  {message: data.message, handle: data.handle});

任何帮助都将不胜感激,这是非常奇怪的行为:(

编辑:以下是相关的服务器代码

var express = require('express'), 
app = express(),
http = require('http'),
server = http.createServer(app),
io = require('socket.io').listen(server),
routes = require('./routes'), 
chatroom = require('./routes/chatroom'),
path = require('path');

io.configure(function () {
    io.set("transports", ["xhr-polling"]);
    io.set("polling duration", 10);
});

io.sockets.on('connection', function (socket) {
    socket.on('join_room', function(data) {
        socket.join(data.chatroom);
        socket.emit('joined_room', data.chatroom);
    });

    socket.on('send_message', function (data) {
        io.sockets.in(data.chatroom).emit('broadcast_message',  {message: data.message, handle: data.handle});
    });
});

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.methodOverride());
    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));
});

app.get('/', routes.index);
app.get('/room/:chatroom', chatroom.create_room);

server.listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});

共有1个答案

鲜于谦
2023-03-14

默认情况下,连接到套接字(socket.io服务器)的每个客户机都被分配到一个由空对象或数组表示的空房间,我现在不记得了。

下面是我将客户加入房间时使用的代码:

socket.room = "room1";
socket.join(socket.room);

这就是发送消息的方式:socket.sockets.in(client.room).emit(“update”,“一个人已经连接到”+room.name+“room.”);

http://tamaspiros.co.uk/2013/07/15/advanced-chat-using-node-js-and-socket-io-episode-1/

 类似资料:
  • 问题内容: 我正在研究nodejs / socket.io的实时聊天,并且需要一些有关实施会议室的建议。 使用名称空间或使用房间功能来完全隔离颤抖的对方,哪个更好? 房间和名称空间之间真正的技术区别是什么? 资源使用方面有区别吗? 问题答案: 这是名称空间和房间 的共同点 (socket.io v0.9.8-请注意,v1.0涉及完整的重写,因此情况可能有所更改): 命名空间(io.of(’/ ns

  • 问题内容: 我正在尝试通过构建一组动态创建的聊天室来学习Socket.io,这些聊天室在用户进入和离开时会发出“已连接”和“已断开”消息。看着问题,我已经把一些功能,但大多数链接的响应是从谁承认自己已成功侵入一起答案的人,我已经注意到有一个更普遍的-和最近- 有关的权利的方式来讨论在Socket.io存储库上执行此操作(尤其是在此处和此处) 因为我是个新手,所以我不知道下面的工作是否是可以接受的处

  • 我在房间使用关系中添加了一对多关系。我引用这篇文章是为了编写以下房间关系代码。 这篇文章讲述了如何从数据库中读取值,但将实体存储到数据库中会导致用户ID为空,这意味着这两个表之间没有关系。 我不确定在具有用户ID值的情况下,将用户和宠物列表插入数据库的理想方法是什么。 1)用户实体: 2) 宠物实体: 3)用户带宠物POJO: 现在,为了从DB中获取记录,我们使用以下DAO: 编辑 我已创建此问题

  • 在我的Android项目中,我使用Room库来处理SQLite数据库。我使用我的数据库来保存国家电话代码。我的数据库预加载了两个国家(watch大众数据库与国家代码(道:电话代码道)功能); 国家代码实体 DAO接口 在我的应用程序中,我按顺序选择国家代码(观察函数selectCountryCodeByOrder(order:Int):Int)。我在异步{}协同例程中异步调用此函数。但我有一个相当

  • 问题内容: 我想请你帮忙。我在socket.io的客户端上遇到了麻烦,我想在客户端调用此代码以在socket.io中创建一个房间: 我不知道这是否正确,如果不正确,请帮助我纠正这些家伙。我不是在节点js和套接字方面专业,但我已经阅读了他们的wiki。有没有可能创造空间的方法? 问题答案: 不需要创建Socket.IO中的房间,而是在套接字加入时创建一个房间。它们是在服务器端加入的,因此您必须指示服

  • 在许多应用中,有必要将用户划分为可以一并处理的几个子集。最好的例子是,一个包含多个房间的聊天应用,当用户收到他所在的房间的消息,而不会收到其他人所在房间的消息。Flask-SocketIO支持通过join_room()和leave_room()函数来支持房间的概念: from flask_socketio import join_room, leave_room @socketio.on('j