我在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
答案 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);