socket.io odaları veya ad alanı?


163

Ben gerçek zamanlı sohbet için nodejs / socket.io araştırıyorum ve oda uygulamak için bazı tavsiyeye ihtiyacım var.

Hangisi daha iyi, isim alanını kullanmak veya sohbet edenlerin groplarını birbirinden tamamen izole etmek için oda özelliğini kullanmak mı?

odalar ve isim alanı arasındaki gerçek teknik fark nedir?

Kaynak kullanım farkı var mı?

Yanıtlar:


216

Ad alanlarının ve odaların ortak noktası budur (socket.io v0.9.8 - v1.0'ın tam bir yeniden yazma içerdiğini unutmayın, bu yüzden işler değişmiş olabilir):

  • Sunucu tarafında hem ad alanları ( io.of ('/ nsp') ) ve odalar ( socket.join ('room') ) oluşturulur
  • Birden çok ad alanı ve birden çok oda aynı (WebSocket) bağlantısını paylaşır
  • Sunucu yalnızca tel üzerinden bir nsp / odaya bağlanan / katılan istemcilere ileti iletir , yani yalnızca istemci tarafı filtreleme değildir

farklar :

  • ad istemci tarafından bağlanmıştır kullanarak io.connect(urlAndNsp)(istemci zaten sunucuda var olduğu takdirde o ad alanına eklenecektir)
  • odalar yalnızca sunucu tarafında birleştirilebilir (istemcilerin katılmasını sağlamak için sunucu tarafında bir API oluşturmak basittir)
  • ad alanları yetkilendirme korumalı olabilir
  • yetkilendirme odalarla birlikte kullanılamaz , ancak odaların kullanılmasıyla ilgili bir bükülme olması durumunda yukarıda belirtilen, oluşturması kolay API'ye özel yetkilendirme eklenebilir
  • odalar bir ad alanının bir parçasıdır (varsayılan olarak 'global' ad alanını kullanır)
  • ad alanları her zaman global kapsamdadır

Kavramın adıyla (oda veya ad alanı) karıştırılmaması için, konsepte başvurmak için bölmeyi ve kavramın uygulanması için diğer iki adı kullanacağım . Yani eğer sen

  • bölme başına yetkilendirme gerekir , ad alanları almak için en kolay yol olabilir
  • hiyerarşik olarak katmanlı bölmeler istiyorsanız (maks. 2 katman), bir ad alanı / oda kombinasyonu kullanın
  • istemci tarafı uygulamanız (bölmeleri önemsemeyen ancak birbirinden ayrılması gereken) farklı bölümlerden oluşuyorsa, ad alanlarını kullanın.

İkincisi için bir örnek, her biri socket.io'yu bağımsız olarak kullanan farklı modüllerin (örneğin üçüncü taraf) aynı uygulamada kullanıldığı ve tek bir ağ bağlantısını paylaşmak istediği büyük bir istemci uygulamasıdır.

Bunu gerçekten kıyaslamamakla birlikte, mesajlarınızı ayırmak ve gruplandırmak için projenizde basit bölümlere ihtiyacınız varsa, her ikisi de iyi.

Bunun sorunuzu cevaplayıp yanıtlamadığından emin değilim, ancak bu cevaba götüren araştırma en azından daha net görmeme yardımcı oldu.


5
Socket.io sürüm> = 1.0'dan sonra bu konuda değişen önemli bir şey var mı?
Xeroxoid

2
Son sürümdeki değişiklikler, socket.io/docs/rooms-and-namespaces adresini okuyun ve bu cevap, oda şeylerini anlamak için yararlı olabilir stackoverflow.com/questions/24041220/…
Gonzalo Bahamondez

1
Ad alanının web uygulamamın belirli bir alanı olduğunu söyleyebilir miyiz ve o alandaki bir grup müşteriyi odalayabilir mi?
Onaiggac

Bir oda / ad alanıyla bağlantıyı keserken hakkında bir şeyler ekleyebilir misiniz? İstemci bağlantıyı geçici olarak keserse veya kaybederse kendilerine ne olur. İşte yazılmıştır: Bağlantı kesildiğinde, soketler otomatik olarak parçası oldukları tüm kanalları terk eder ve sizin parçanızda özel bir söküme gerek yoktur. Bir mı Kanal sizin aynı Kompartımanındaki ?
Wilt

67

Bu eski bir soru ama konuyla ilgili biraz araştırma yaptıktan sonra kabul edilen cevabın önemli bir noktada net olmadığını görüyorum. Guillermo Rauch'un kendisine göre ( bağlantıya bakın ): Teorik olarak çalışan bir uygulamada dinamik olarak ad alanları oluşturmak mümkün olsa da, bunları esas olarak uygulamanızın önceden tanımlanmış ayrı bölümleri olarak kullanırsınız. Öte yandan, kullanıcı / bağlantı gruplarını barındırmak için geçici bölmeler oluşturmanız gerekiyorsa, oda kullanmak en iyisidir.


3
Beğendim! Ad alanları - Önceden tanımlanmış bağlantılar. Odalar - Dinamik Bağlantılar
Nandakumar

16

Ne yapmak istediğine bağlı.

Temel fark, odaların uygulanması daha zordur. Her sayfanın yeniden yüklenmesi ile odalara katılmak için bir yöntem yapmanız gerekir.

İle ad sadece yazma gerekir var example = io.connect('http://localhost/example');senin içinde javascript istemci ve istemci otomatik ad alanlarında eklenir.

Kullanım örneği:

  • odalar: özel sohbet.
  • ad alanları: sayfanın sohbeti.

2

Odalar ve ad alanları iletişimi bölümler ve ayrı soketleri gruplandırır.

Bir odaya veya bir isim alanına yapılan bir yayın herkese yalnızca üyelere ulaşmaz.

İsim alanları ve odalar arasındaki fark şudur:

  • Ad alanları: ön uçta yönetilir, yani kullanıcı veya bir saldırgan ön uçtan katılır ve birleştirme ve bağlantı kesme burada yönetilir.
  • Odalar: arka uçta yönetilir, yani sunucu birleştirme ve ayrılma odaları atar.

Fark esas olarak onları kimin yönettiği

Ne kullanacağınıza karar vermek için, segmentasyonun ön uçta mı yoksa arka uçta mı yönetileceğine karar vermelisiniz


0

Ad alanları, aynı ada sahip nesneler oluşturmanıza olanak tanır, ancak kapsam olarak da bilinen farklı ad alanlarında yaşayacaklarından ayrı olurlar.

Bu Socket.IO ad alanları ile aynı düşünce sürecidir. Modüler bir Düğüm web uygulaması oluşturuyorsanız, farklı modülleri adlandırmak isteyeceksiniz. Ad alanı kodumuza tekrar bakarsanız, farklı ad alanlarında aynı olayları dinleyebildiğimizi göreceksiniz. Socket.IO'da, varsayılan bağlantıdaki connection olayı ve / xxx ad alanındaki connection olayı farklıdır. Örneğin, sitenizde bir sohbet ve yorum sisteminiz varsa ve her ikisinin de gerçek zamanlı olmasını istiyorsanız, her birini ad alanı oluşturabilirsiniz. Bu, yalnızca kendi bağlamında yaşayan tüm bir Socket.IO uygulaması oluşturmanıza olanak tanır.

Paketlenecek ve kurulacak bir şey inşa ediyorsanız da bu geçerli olurdu. Birinin varsayılan ad alanında belirli olayları zaten kullanıp kullanmadığını bilemezsiniz, bu nedenle kendi olayınızı oluşturmalı ve orada dinlemelisiniz. Bu, paketinizi kullanan hiçbir geliştiricinin parmaklarına basmamanıza izin verir.

Ad alanları, bağlantıları farklı bağlamlara bölmemizi sağlar. Bunu, bağlantıları birlikte gruplandırmamıza izin veren odalarla karşılaştırabiliriz, daha sonra aynı bağlantıyı diğer odalara da katabiliriz.

Ad alanları, Socket.IO'nun çalışması için farklı bağlamlar oluşturmanıza olanak tanır. Odalar, istemci bağlantılarını bu bağlamlar içinde gruplandırmanıza olanak tanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.