2013-05-07 12 views
30

私は新しいチャットルームを作成してチャットを開始できるSocket.IOの上にシンプルなチャットルームシステムを構築したいと思います。Socket.IOは複数のチャンネルを購読します

この音はシンプルですが、Socket.IO 0.9.4と同じですが、socket.ioのドキュメントとともにいくつかのSOの記事を読んだ後、私はますます混乱しています。ですから、誰かが私に働く指示を私に与えることを願っています。0.9.4:

  1. 私は部屋を購読する方法が必要です。ルーム名はユーザーが選択します。会議室にメッセージが投稿されると、そのメッセージを受信する必要があります。どのようにサーバーコードを書くべきですか?クライアントコードをどのように書くべきですか?

  2. 複数の部屋に同時に参加することができます。

  3. 特定の部屋のすべてのユーザーに別のシステムからメッセージを送信したいと考えています。この '別のシステム'は、特急で処理された要求によってメッセージを送信します。そのリクエストハンドラはどのように書くのですか?

+0

この問題は解決しましたか?もしそうなら、あなたは私にソースコードを指摘できますか?ありがとう – sinusGob

答えて

88

これは、socket.ioのルーム機能ではかなり簡単です。 LearnBoost wikiのドキュメントを見てください。

https://github.com/LearnBoost/socket.io/wiki/Rooms

これは、単一ソケットの上に複数の部屋に接続されてすることができます。私は次のコードを使って簡単なテストをまとめました。

Expressのルートからのメッセージを送信するサーバ

io.sockets.on('connection', function(socket){ 
    socket.on('subscribe', function(room) { 
     console.log('joining room', room); 
     socket.join(room); 
    }) 

    socket.on('unsubscribe', function(room) { 
     console.log('leaving room', room); 
     socket.leave(room); 
    }) 

    socket.on('send', function(data) { 
     console.log('sending message'); 
     io.sockets.in(data.room).emit('message', data); 
    }); 
}); 

クライアント

var socket = io.connect(); 
socket.on('message', function (data) { 
    console.log(data); 
}); 

socket.emit('subscribe', 'roomOne'); 
socket.emit('subscribe', 'roomTwo'); 

$('#send').click(function() { 
    var room = $('#room').val(), 
    message = $('#message').val(); 

    socket.emit('send', { room: room, message: message }); 
}); 

は、同様に非常に単純です。

app.post('/send/:room/', function(req, res) { 
    var room = req.params.room 
     message = req.body; 

    io.sockets.in(room).emit('message', { room: room, message: message }); 

    res.end('message sent'); 
}); 
+0

クライアントが2つの部屋のいずれかを離れる方法はありますか? – kbariotis

+0

わかりません。配列内に2つの部屋を格納してから、ループして予約を解除することもできます。または、切断機能があるかもしれません。 (私はそれを使ったことがない) –

+0

@kbariotisは完全に。 '' leave ''のようなメッセージを作成し、クライアントが残したい部屋の名前でそれを送るようにしてください。次に、「切断」ボタンを押して、そのようなメッセージを送信します。サーバーサイドでは、指定された部屋を離れるようソケットを注文します。 –

関連する問題