我拥有存储在mysql数据库中的每个连接用户的活动套接字ID。我想从数据库中获取一些选定的用户,然后为这些选定的用户创建一个房间,并向这个动态创建的房间广播消息。这是我的代码:
var query = pool.query('SELECT socketid FROM registration WHERE sent=1'),
users = []; // this array will contain the socketid's of connected users stored in our db query
query
.on('error', function(err) {
console.log( err );
})
.on('result', function( user ) {
users.push( user );
});
io.emit('refresh feed',status);
users.foreach(function(socketid){io.sockets.connected[socketid].join(sendingSocket.id);});
sendingSocket.to(sendingSocket.id).emit('publicMessage', 'Hello! How are you?');
答案 0 :(得分:0)
对数据库的调用需要一些时间。
但是如果我是正确的,你可以异步调用查询方法。
这意味着,在填充users-array之前,您已经迭代了它。
使用users数组在if (Meteor.isClient) {
Session.setDefault('dynamicArray', [{text: "item1"},{text: "item2"}]);
Template.body.helpers({
dynamicData: function(){
return Session.get('dynamicArray');
}
});
// place for code to sync dynamicArray with server
}
if (Meteor.isServer) {
Meteor.startup(function () {
var dynamicArray = [{text: "item3"},{text: "item4"},{text: "item5"}];
// place for code to publish dynamicArray for client
});
}
之前添加控制台输出。
解决方案是将最后三行放入io.emit
- 处理程序。