0

私は node.js と socket.io を使用しています。

私はmysqlテーブルにこのデータ構造を持っています:

TABLE USERS:
    Id: 1, Name: 'ABC1', ToUserId: 1
    Id: 2, Name: 'ABC2', ToUserId: 1
    Id: 3, Name: 'ABC3', ToUserId: 1
    Id: 4, Name: 'ABC4', ToUserId: 2
    Id: 5, Name: 'ABC5', ToUserId: 2
    Id: 6, Name: 'ABC6', ToUserId: 2
    Id: 7, Name: 'ABC7', ToUserId: 3

行 (ID1 - ID3) をコレクションとして UserId 1 のユーザーに、行 (ID4 - ID6) を UserId 2 のユーザーに、行 (ID7) を UserId 3 のユーザーに送信したいと考えています。

コレクションを作成してユーザーに送信するにはどうすればよいですか?

私は次のようにデータを読みました:

getUsers: function(callback)
    {

        client.query(
            'SELECT * FROM users',
            function select(err, results, fields) {
                if (err) {
                    throw err;
                }

                var userslist = {};


                if (results.length > 0) {

                    for (var i = 0; i < results.length; i++) {
                        var row = results[i];                        

                    //Create colletion in object userslist
                    //Emit to specific user ------v                        
                    //io.sockets.socket(USER_ID).emit('sendusers', userslist ) 
                    }

                }
        else
                {
                    userslist = {}; 
                } 

                callback(userslist);
            }
            );
    }
4

1 に答える 1

2

ソケット ID とユーザー ID の関連付けを保存する必要があります。

クライアントでは、現在のユーザーの USER_ID を発行する必要があります。

何かのようなもの

socket= io.connect();
socket.on('connect', function(data){
    socket.emit('init', user_id);
});

また、サーバーで user_id を設定する必要があります。次のようなことができます

io.sockets.on('connection', function(socket) {
    socket.on('init', function(data) {
        socket.set('user_id', data, function(){
            console.log('user_id', data);
        });
    });
});

次に、コントローラーですべてのソケットを取得し、それらをループできます。

//to get all connections
var sockets = io.sockets.clients();

//to get the user_id associated with the socket
socket.get('user_id', function(err, user_id){
    //do whatever you want!
    //ex: if(user_id == ...){ socket.emit('channel', 'value'); }
});

それが役立つことを願っています!

于 2012-07-12T18:14:01.013 に答える