【问题标题】:emit to all after receiving a broadcast收到广播后向所有人发出
【发布时间】:2013-06-22 10:00:08
【问题描述】:

我有一个小应用程序可以生成代码并将其存储在 mongodb(我的 chrome 浏览器)中。另一个用户(我的 firefox 浏览器)输入给定的代码并广播它让我的 chrome 知道他在那里。

现在我希望我的 chrome 浏览器向自己和我的 firefox 浏览器发出一个协议,以便在协议发出的那一刻它们都被同一个函数解析。

然而,关键是我的终端中只有 1 个控制台日志,这让我认为只有 Chrome(或 Firefox,我怀疑)正在监听发射。

谁能看看为什么两个浏览器都没有收到“协议”发射?

我的 app.js:(连接部分)

io.sockets.on('connection', function (socket) {
    socket.on('code_game', function (data) {
        if (codeToUse == data.code) {
            //The receiving end received the proper code from the sending end
            console.log(data.secondUser + ' is verbonden via de code: ' + data.code);
            //Emit to all parties to let everyone know there's a connection
            socket.emit('agreement', { 
                userOne: {
                    name: 'Timen',
                    code: codeToUse
                },
                userTwo: {
                    name: data.secondUser,
                    code: data.code
                }
            });
        }
    });
});

在我看来被调用的 JS 文件:(在这种情况下,sendToFirstUser 是 Firefox)

var receivingUsersCode = false;
var receivingUsersName = false;
var socket = io.connect('http://localhost');

socket.on('agreement', function (data) {
    console.log("hooray");
});

function setReceivingData(code, username) {
    receivingUsersCode = code;
    receivingUsersName = username;
    ding = 'drie';
    $('#new_game').css('display', 'block');
    $('.theCode').html(receivingUsersCode);


}

function sendToFirstUser(code, username) {
    socket.emit('code_game', { code: code, secondUser: username});
}

【问题讨论】:

    标签: javascript node.js websocket socket.io


    【解决方案1】:

    我不确定我是否完全理解您的要求。但在我看来,您似乎在问为什么您的 Chrome 和 Firefox 浏览器都没有发出“协议”事件。如果是这样,我想你已经回答了你自己的问题:

    “另一个用户(我的 firefox 浏览器)输入给定的代码并广播它,让我的 chrome 知道他在那里。”

    //Starts broadcasting to other clients
    io.sockets.on('connection', function (socket) {
        socket.broadcast.emit('code_game', { code: req.body.code, secondUser: req.body.secondUser});
    });
    

    您的 firefox 浏览器仅通过 socket.broadcast.emit 向其他客户端(您的 chrome 浏览器)发射。因此,只有 chrome 浏览器会在浏览器端接收 'code_game' 事件。但是在您的浏览器端代码中,客户端在收到 'code_game' 事件时会发出 'agreement' 事件:

    socket.on('code_game', function (data) {
        if (receivingUsersCode == data.code) {
            console.log(data.secondUser + ' is is connected via code: ' + data.code);
            listenForMutualConnection();
            socket.emit('agreement', { 
                userOne: {
                    name: receivingUsersName,
                    code: receivingUsersCode
                    },
                userTwo: {
                    name: data.secondUser,
                    code: data.code
                }
            });
        }
    });
    

    由于只有 chrome 浏览器接收到 'code_game' 事件,它也是唯一一个发出 'agreement' 事件的浏览器。

    【讨论】:

    • 我希望双方最终达成一致,这样我就可以将双方重定向到 X。我已经设法让我的 firefox 发射到 code_game 并且 code_game 方法现在发射回 firefox。我怎样才能让 code_game 方法将其发送给双方?我已经更新了上面的代码。
    • Aaaaannndd 已修复。我应该在我的 code_game 方法中通过 io.socket 而不是 socket 发出
    猜你喜欢
    • 2010-11-28
    • 2023-02-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多