0

多くのユーザー グループ間でリアルタイム接続を確立したいのですが、サーバー サイド スクリプトは初めてです........ 特定のメッセージ (データ) を特定のユーザーに送信したいのですが、私の質問はどうすればよいかです。すべてのユーザーに同じソケットを使用するか、異なるユーザーまたは異なるタスクに異なるソケット接続を使用するか..?

現在、私は単一のソケットを使用して、この方法でユーザーにサービスを提供しています..これは実際のアプリではなく、私がやろうとしていることの単なるプロトタイプです:

var io = require('socket.io').listen(server);
server.listen(http_port);

var allUsers=[];
var num=1;
io.sockets.on('connection', function (socket) {    
var user = 'user#'+num++;
allUsers[user] = socket;
socket.on('message',function(data){
    if(data.to)
        allUsers[data.to].emit("message",{msg:data.msg,by:data.by});
    });
});

クライアント側:


    socket.emit('message',{to:'user#1',from:'talha',msg:'hello'});
    
たぶん、私は間違ったアプローチを取っています。後でデータベースに問い合わせて、それらの結果を特定のクライアントに送信するためです。それをどのように管理すればよいでしょうか。コードの詳細と回答を提供してください..よろしくお願いします。

4

1 に答える 1

1

いいえ、リッスン ソケットは 1 つしかありません。各接続で ( からわかるようにio.sockets.on('connection', function(socket){..)、 yourfunction(socket){....}が呼び出され、その関数のソケットは各接続/ユーザーと同じです。イベントの関数コールバック"connection"は個別で、ユーザーごとに 1 つずつあります。

編集: ユーザーを分離するユーザーの場合、次のことができます。

var users = [];
io.sockets.on("connection", function(socket){
   socket.on("message", function(data){
        // Handle if it is a valid user, make some authentication and have a username..
        users[username] = socket;
        // on another message, if you want to send message  
        users["myuser"].send(...)
   }

});
于 2013-01-15T21:51:48.763 に答える