Socket.io发送消息到特定的socket.id无法正常工作?

时间:2016-01-02 01:49:02

标签: node.js sockets socket.io

我在socket.io中使用node.js服务器有这个应用程序,我想更新应用程序中连接的每个点的点数。我通过socket.id和clients数组中的secret保留了一个连接用户列表。 我试过这样的但是积分不会更新。谁能告诉我什么是错的?

function updatePoints(){
    points = [];
    pool.getConnection(function(err, connection) {
        connection.query("SELECT * FROM `users`", function(error, rows) {
            for (var i = 0; i < rows.length; i++) {
                points.push({"secret" : rows[i].secret, "points" : rows[i].pontos});
            }
            for (var l = 0; l < points.length; l++) {
                for (var p = 0; p < clients.length; p++) {
                    if(points[l].secret == clients[p].secret){
                        var socketID = clients[p].socket;
                        var pontos = points[l].points;
                        io.sockets.connected[socketID].emit('update points', pontos);
                    }
                }
            }
        });
    });
}

Socket.io版本:1.3.7

2 个答案:

答案 0 :(得分:1)

如何创建一个客户端对象,然后分配一个套接字和一个point属性,然后将它推送到clients数组中?

socketServer.on('connection', function(socket){
     //make your query here
     ...
     //make a client object
     var client = {point: row.point, socket: socket};
     clients[row.secret] = client;
});

然后您可以通过以下方式检索客户端:

//query...
....
clients[row.secret].socket.emit('something', function);

编辑:

如果您想要广播到已连接的客户端,那么您可以:

socketServer.emit('something', function);

如果您希望广播给除播放广播的人以外的所有人。那么你可以:

clients[row.secret].broadcast.emit('something', function;

答案 1 :(得分:0)

替换

io.sockets.connected[socketID].emit('update points', pontos);   

用这个

socket.broadcast.to(socketID).emit('update points', pontos);