2013-05-07 20 views
30

Kullanıcıların yeni bir sohbet odası oluşturabileceği ve insanların sohbet etmeye başlayabileceği Socket.IO'nun üstüne basit bir sohbet odası sistemi kurmak istiyorum.Socket.IO birden fazla kanala abone olun

Bu ses basit ama Socket.IO 0.9.4 olarak şimdi çalışıyorum, socket.io üzerindeki belgeyle birlikte birkaç SO mesajını okuduktan sonra, gittikçe daha fazla şaşıyorum. Yani, birileri 0.9.4 ÇALIŞMAZ talimat bana sağlayabilir umut:

  1. Bir odaya abone olmak için bir yol gerekir. Oda adı kullanıcı tarafından seçilir. Bir odada bir mesaj yayınlandığında, kullanıcı bunu almalıdır. Sunucu kodunu nasıl yazmalıyım, müşteri kodunu nasıl yazmalıyım?

  2. Bir kullanıcı aynı anda birden çok odaya katılabilir.

  3. Belirli bir odada tüm kullanıcılara bir ileti göndermesi için başka bir sistem istiyorum. Bu 'başka bir sistem' mesajı, ifade ile ele alınan bir talep üzerinden gönderir. Bu istek işleyicisini nasıl yazarım?

+0

Bu sorunu çözdünüz mü? eğer öyleyse beni bir kaynak koduna yönlendirebilirdin? teşekkürler – sinusGob

cevap

88

Bu, socket.io odalarının özelliği ile oldukça basittir. LearnBoost wiki'deki belgelere bakın.

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

Tek soket üzerinden birden odaları bağlanmak için izin verir. Aşağıdaki kodla hızlı bir test yaptım.

bir Express rotadan bir mesaj gönderme Sunucu

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); 
    }); 
}); 

Müşteri

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 }); 
}); 

de oldukça basittir.

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

İstemcinin iki odadan birine katılmasının bir yolu var mı? – kbariotis

+0

Emin değilim. Bir dizide 2 oda saklayabilir, daha sonra bir döngü yapabilir ve abonelikten çıkabilirsiniz. Ya da bir bağlantı kesme işlevi olabilir. (Bunu hiç kullanmadım) –

+0

Tamamen kbariotis. '' Ayrıl '' gibi bir mesaj yaratın ve müşterinizin onu bırakmak istediği bir oda adıyla göndermesini sağlayın. Ardından, bu mesajı göndermek için "bağlantıyı kes" düğmesini bağlayın. Sunucu tarafı, verilen odadan çıkmak için soketi sipariş edin. –