2012-02-13 15 views
3

私はNode ExpressアプリケーションでSocket.IOを使用しています。this excellent postで説明されている方法を使用してソケット接続とセッションを関連づけています。 a commentで著者は、このような特定のユーザー(セッション)にメッセージを送信する方法を説明します複数の部屋へのSocket.IOのメッセージ

sio.on('connection', function (socket) { 
    // do all the session stuff 
    socket.join(socket.handshake.sessionID); 
    // socket.io will leave the room upon disconnect 
}); 

app.get('/', function (req, res) { 
    sio.sockets.in(req.sessionID).send('Man, good to see you back!'); 
}); 

は良いアイデアのように思えます。しかし、私のアプリでは、一度に複数のユーザーにメッセージを送信することがよくあります。私はSocket.IOでこれを行う最善の方法について疑問を抱いています - 基本的には最高のパフォーマンスで複数の部屋にメッセージを送信する必要があります。助言がありますか?

答えて

4

2つのオプション:socket.io channelsまたはsocket.io namespaceを使用します。どちらも、socket.ioのウェブサイト上で文書化されますが、短期的にされています

使用チャンネル:

// all on the server 
// on connect or message received 
socket.join("channel-name"); 
socket.broadcast.to("channel-name").emit("message to all other users in channel"); 

// OR independently 
io.sockets.in("channel-name").emit("message to all users in channel"); 

使用して名前空間:

// on the client connect to namespace 
io.connect("/chat/channel-name") 

// on the server receive connections to namespace as normal 
// broadcast to namespace 
io.of("/chat/channel-name").emit("message to all users in namespace") 

をsocket.ioが実際に開けないように十分にスマートであるため、追加の名前空間のための2番目のソケットは、どちらの方法も効率的でなければなりません。

+3

これらは私が既に各ユーザーを識別するために行っていることと同等だと思います。つまり、各ユーザーは自分のセッションキーに基づいて独自のsocket.ioチャンネルを取得し、そのチャンネルにブロードキャストしてそのユーザーに送信します(ただ1つのソケットで直接発光するのではなく)。だから私の質問です:これらのユーザーのうちの2人(各部屋で表される)が同じメッセージを受信する必要がある場合、これを行う効率的な方法はありますか? – Joel

+3

最後のビットは 'io.of( '/ chat/channel-name')であってはいけません – Funkodebat

関連する問題