Websocket不发送数据给所有客户端
问题描述:
美好的一天,Websocket不发送数据给所有客户端
我使用node.js和https://github.com/felixge/node-mysql mysql包。
我这里有一个脚本,将所有连接的客户端的数据(至少它应该)
for(var i = 0; i < clients.length; i++)
{
sql.query("SELECT coins FROM users_steam WHERE steamid="+clients[i].ID,function(err,rows){
if(err) throw err;
var bal = rows[0].coins;
clients[i].send(JSON.stringify({
'type':'roll',
'roundid':ROUND,
'places':r,
'wait':WAIT,
'roundtime':RollTime,
'balance':bal
}));
clients[i].balRefreshes=0;
});
}
虽然问题是,我得到TypeError: Cannot call method 'send' of undefined
,这意味着该ID不正确分配。我应该按顺序执行查询还是在这种情况下执行其他操作?
感谢
答
,我可以看到的是,因为你的数据库调用是异步,并会在以后的时间被调用时,变量“i”将是其在选择查询值不同的第一个问题。
例如,尝试在您的控制台运行此代码:
for(var i = 0; i < 100; i++)
{
setTimeout(function(){
console.log(i)
}, 1000);
}
你可以代替试试这个:
clients.forEach(function(client, i){
setTimeout(function(){
console.log(i)
}, 1000);
});
是啊,我刚才注意到,实际上的NodeJS是异步。但我怎么能这样做那呢? – Nedas
检查我的编辑:) – Derek