使用socket.io向每个套接字发送私有详细信息

时间:2014-07-09 11:54:55

标签: node.js sockets socket.io

我在多人游戏测验中有2名玩家。

每个客户都有真实的答案和错误的答案。

真答案:socket.true

错误答案:socket.false

我逐渐增加每个变量的答案,最后,在5个答案之后,我调用了finishgame函数。

我想在finishgame函数中发送包含每个客户端的真实答案和错误答案计数的数据。

我该怎么做?

如果我使用socket.emitsocket.broadcast.to(socket.room).emit,则只会发送一个套接字数据。

例如:

Send joe -> joe has 3 true , 2false answers;
Send tim -> tim has 1 true , 4 false answers.

但它并没有发生。

1 个答案:

答案 0 :(得分:0)

现在创建一个名为answers的新对象,当客户端启动测验时,如果需要添加一个真或假的答案,则创建一个以socket.id为索引的新answers对象编辑/创建该answers对象的属性(示例answers[socket.id]['trueAnswers']++)。现在,当您想要向客户端发送真实和错误答案时,您可以使用提供的socket.id作为索引从您想要数据的客户端轻松读取answers对象。

示例:

        // Create the object
        Answers = new Object();

        // Client starts the quiz:
        Answers[socket.id] = {
            trueAnswers: 0,
            falseAnswers: 0
        };

        // Client made a correct answer:
        Answers[socket.id].trueAnswers++;

        // Send answers data back that is owned by this socket.id
        io.sockets.socket(socket.id).emit(Answers[socket.id]); // Shows 'Object {trueAnswers: 1, falseAnswers: 0}'

编辑:如果您想通过forEach方式发送此内容,就像您描述的那样,我相信这可能就是您所寻找的内容:

  • 请注意,此函数在高于1.0的socket.io版本中不再可用,建议保留socket.id的数组,以便在需要时迭代它们。

        io.sockets.clients().forEach(function (socket) {
                    // This will go trough all connected sockets
        });