【问题标题】:Why socket.join doesn't work in connection.query?为什么socket.join在connection.query中不起作用?
【发布时间】:2017-08-04 01:37:30
【问题描述】:

我想我发现了一个错误。如果我将 socket.join(/any room here/) 放在 connection.query 函数中,它不会简单地加入那个房间。有趣的事实是 console.log 有效:

function registerInRoom (user, room) {
    var post_room = {Users_user_id: user, Rooms_room_id: room, ur_id: undefined};
    connection.query('INSERT INTO mydb.users_has_rooms SET ?', post_room, function(err) {
        if (err) throw err;
        socket.room = room;
        console.log("joined room");
        socket.join("Room 1");
    });

};//registerInRoom

这是工作代码:

function registerInRoom (user, room) {
    var post_room = {Users_user_id: user, Rooms_room_id: room, ur_id: undefined};
    connection.query('INSERT INTO mydb.users_has_rooms SET ?', post_room, function(err) {
        if (err) throw err;
        socket.room = room;
        console.log("joined room");
    });
    socket.join("Room 1");
};//registerInRoom

我的问题是……我在思考过程中做错了什么?

【问题讨论】:

  • 我相信你有一个词法范围问题,因为套接字不一定存在于该查询的本地,并且因为它无法访问它,它仍然是未定义的,因此没有做任何事情。
  • 在节点调试器中它说:socket.io:socket joining room 1 +101ms socket.io:socket joined room 1 并在此房间套接字中发送消息后发出事件“发送消息”并调度它,但客户端没有收到数据包“新消息”,而在第二种情况下它确实。

标签: javascript mysql node.js socket.io


【解决方案1】:

原来我的问题是由覆盖原始 socket.id 引起的,这是不应该做的:

socket.id = result.insertId;

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 2017-09-16
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2018-11-12
    • 2021-09-14
    • 2019-04-29
    相关资源
    最近更新 更多