socket.io从存储在mysql数据库中的socket id创建动态空间

时间:2015-05-29 10:27:52

标签: node.js sockets socket.io

我拥有存储在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?');

1 个答案:

答案 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 - 处理程序。