收到广播后发给所有人

时间:2013-06-22 10:00:09

标签: javascript node.js websocket socket.io

我有一个小应用程序生成代码并将其存储在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});
}

1 个答案:

答案 0 :(得分:0)

我不确定我到底知道你在问什么。但在我看来,你似乎在问为什么你的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”事件时会发出“协议”事件:

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'事件,因此它也是唯一一个发出'协议'事件的事件。