SORU
15 Aralık 2010, ÇARŞAMBA


düğüm-websocket-server: birden fazla, ayrı "yayın" tek node.js bir işlem olması mümkün mü?

Mümkünse "bağlantıları" node-websocket-server uygulama aynı örnekten çalışıyor. farklı websocket yayın için olup olmadığını bilmek istiyorum Katılımcıların her oda için özel, tek node.js sunucu işlemi için birden fazla oda ile sohbet odası sunucusu, yalnızca yayın mesajları düşünün. Başarılı bir sohbet odası başına işlem çözümü uygulamaya çalıştım, ama bir sonraki aşamaya geçmek istiyorum.

CEVAP
15 Aralık 2010, ÇARŞAMBA


Muhtemelen aceleye denemek istiyorum: Yuva üzerine inşa edilen http://github.com/aaronblohowiak/Push-It.IO. Tasarım Bayeux Protokolü yapışır.

Eğer redis pubsub kullanan bir şey varsa, http://github.com/shripadk/Socket.IO-PubSub kontrol edebilirsiniz

Özellikle sorunuza cevap: tüm müşteriler websocket sunucuya bağlı bir dizi koruyabilirsiniz. Ve muhtemelen bu hastaların bir alt yayını? Yayın yöntemi aslında bu başlık altında bunu yapıyor. düğüm-websocket-sunucu/Yuva.IO tüm bağlı istemcilerin bir dizi tutar ve sadece hepsini ""müşteri. her bir mesaj gönder ıng döngüsü Kod kitap

// considering you storing all your clients in an array, should be doing this on connection:
clients.push(client)

// loop through that array to send to each client
Client.prototype.broadcast = function(msg, except) {
      for(var i in clients) {
          if(clients[i].sessionId !== except) {
             clients[i].send({message: msg});
          }
      }
}

Eğer özel kanallar sadece mesajları geçiş yapmak istiyorsanız, sadece tüm kanalları istemci tarafından abone listesini tutmak. İşte bir örnek (sadece başlangıç için) :

clients.push(client);


Client.prototype.subscribe = function(channel) {
      this.channel = channel;
}

Client.prototype.unsubscribe = function(channel) {
     this.channel = null;
}

Client.prototype.publish = function(channel, msg) {
      for(var i in clients) {
         if(clients[i].channel === channel) {
            clients[i].send({message: msg});
         }
      }
}

Daha da kolaylaştırmak için EventEmitters kullanın. -Websocket-düğüm sunucu Soket/.IO mesajları alınamıyor yerini ve türünü (/iptal/abone yayınlamak) kontrol edin ve mesaj türüne bağlı olarak olayın sağlamak için ileti ayrıştırılamadı. Örnek:

Client.prototype._onMessage = function(message) {
       switch(message.type) {
         case 'subscribe':
             this.emit('subscribe', message.channel);
         case 'unsubscribe':
             this.emit('unsubscribe', message.channel);
         case 'publish':
             this.emit('publish', message.channel, message.data);
         default:

       }
}

Olaylar üzerine uygulamanızın içinde yayılan dinle('bağlantı') :

client.on('subscribe', function(channel) {
     // do some checks here if u like
     client.subscribe(channel);
});
client.on('unsubscribe', function(channel) {
     client.unsubscribe(channel);
});
client.on('publish', function(channel, message) {
     client.publish(channel, message);
});

Bu yardımcı olur umarım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fufko

    fufko

    27 ŞUBAT 2006
  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008
  • pissengehen

    pissengehen

    26 EYLÜL 2006