SignalR: Neden Hub ve Kalıcı Bağlantı'yı seçmelisiniz?


150

Son zamanlarda SignalR'de arama yapıyorum ve okuyorum ve Hub'lar ve Kalıcı Bağlantılar arasındaki farkın ne olduğuna dair çok fazla açıklama görürken, başımı bir sonraki seviyeye getiremedim, bu yüzden diğerine nazaran bir yaklaşım seçin?

Yanıtlar:


92

Bağlantı ve Hublar bölümünde gördüğüm kadarıyla, Hub'lar alt düzey kalıcı bağlantıları kaplayan bir konu sistemi sağlıyor gibi görünüyor.

Aşağıdaki yüksek oy alan yorumdan:

Kısmen doğrudur. Kalıcı bağlantılarda da konu veya grup alabilirsiniz. En büyük fark, farklı türdeki mesajların gönderilmesidir. Örneğin, farklı türde mesajlarınız var ve farklı türde yükler göndermek istiyorsunuz. Kalıcı bağlantılarda, ileti türünü yüke katmanız gerekir (bkz. Ham örnek), ancak hub'lar bir bağlantı üzerinden RPC yapma olanağı sağlar (istemcide sunucudan ve sunucudan istemciye yöntemleri çağırmanıza izin verir) . Başka bir büyük şey model bağlama. Hub'lar, güçlü bir şekilde yazılan parametreleri yöntemlere geçirmenizi sağlar.

Belgelerde kullanılan örnekte, kullanıcıların belirli bir odaya katılabileceği ve yalnızca aynı odadaki diğer kullanıcılardan ileti alabileceği bir sohbet odası metaforu kullanılmaktadır. Daha genel olarak, kodunuz bir konuya abone olur ve daha sonra yalnızca o konuyla ilgili iletiler alır. Kalıcı bağlantılarla tüm mesajları alırsınız.

Kalıcı bağlantıların üzerine kendi konu sisteminizi kolayca oluşturabilirsiniz, ancak bu durumda SignalR ekibi sizin için işi zaten yaptı.


180
Kısmen doğrudur. Kalıcı bağlantılarda da konu veya grup alabilirsiniz. En büyük fark, farklı türdeki mesajların gönderilmesidir. Örneğin, farklı türde mesajlarınız var ve farklı türde yükler göndermek istiyorsunuz. Kalıcı bağlantılarda, ileti türünü yüke katmanız gerekir (bkz. Ham örnek), ancak hub'lar bir bağlantı üzerinden RPC yapma olanağı sağlar (istemcide sunucudan ve sunucudan istemciye yöntemleri çağırmanıza izin verir) . Başka bir büyük şey model bağlama. Hub'lar, güçlü bir şekilde yazılan parametreleri yöntemlere geçirmenizi sağlar.
davidfowl

1
İyi bir nokta @davidfowl - Yorumunuzu daha belirgin olması gerektiğini düşündüğüm gibi cevaba kopyaladım.
ColinE

63

Temel fark, PersistentConnection ile RPC yapamamanız, sadece ham veri gönderebilmenizdir. Yani sunucudan böyle mesajlar göndermek yerine

Clients.All.addNewMessageToPage(name, message);

Connection.Broadcast()veya ile bir nesne göndermeniz gerekir Connection.Send()ve ardından müşteri bununla ne yapacağına karar vermelidir. Örneğin, aşağıdaki gibi bir nesne gönderebilirsiniz:

Connection.Broadcast(new {
    method: "addNewMessageToPage",
    name: "Albert",
    message: "Hello"
});

Ve müşteri üzerinde, sadece

yourHub.client.addNewMessageToPage = function(name, message) { 
    // things and stuff
};

tüm gelen iletileri işlemek için bir geri arama eklemeniz gerekir:

function addNewMessageToPage(name, message) {
    // things and stuff
}

connection.received(function (data) {
    var method = data.method;

    window[method](data.name, data.message);
});

Aynı türde bir gönderme işlemini sunucu tarafında yapmalısınız. OnReceivedYöntemin . Ayrıca, hub yöntemleriyle yaptığınız gibi, güçlü yazılan nesneleri almak yerine oradaki veri dizesini serileştirmeniz gerekir.

Hub'lar üzerinde PersistentConnection'ı seçmek için pek fazla neden yoktur. Farkına varmamın bir nedeni , hub'ları kullanarak yapamayacağınız PersistentConnection aracılığıyla önceden JSON göndermenin mümkün olmasıdır . Bazı durumlarda, bu ilgili bir performans avantajı olabilir.

Bunun dışında, dokümandaki bu alıntıya bakın :

Bir iletişim modeli seçme

Çoğu uygulama Hubs API'sını kullanmalıdır. Connections API, aşağıdaki durumlarda kullanılabilir:

  • Gönderilen gerçek mesajın formatının belirtilmesi gerekir.

  • Geliştirici, uzaktan çağırma modeli yerine mesajlaşma ve gönderme modeliyle çalışmayı tercih eder.

  • SignalR kullanmak için bir mesajlaşma modeli kullanan mevcut bir uygulama taşınmaktadır.

Mesaj yapınıza bağlı olarak, PersistentConnection'ı kullanmanın küçük performans avantajlarından da yararlanabilirsiniz.

SignalR örneklerine, özellikle buradaki bilgilere bakmak isteyebilirsiniz .


İş arkadaşlarımdan biri Hub'lar üzerinde PersistentConnection'ı seçmesinin nedeninin güvenlik nedeni olduğunu söyledi, Hub'larda herhangi bir güvenlik sorunu var mı?
Mehdi Dehghani

24

SignalR'yi kullanmanın iki yolu vardır: PersistentConnectionsınıfını geçersiz kılarak düşük bir seviyeye erişebilirsiniz , bu da size çok fazla kontrol sağlar; veya yüksek seviyeli 'Hub'ları kullanarak SignalR'ın sizin için tüm ağır kaldırma işlemlerini yapmasına izin verebilirsiniz.


5

Kalıcı Bağlantı daha düşük seviyeli bir API'dir, bağlantı açıldığında veya kapatıldığında daha spesifik bir zamanda eylemler gerçekleştirebilirsiniz, çoğu uygulamada Hub en iyi seçimdir


4

Bu ikisini karşılaştırırken göz önünde bulundurulması gereken üç önemli nokta vardır:

  • Mesaj Biçimi
  • İletişim modeli
  • SignalR özelleştirmesi

Hub'larda mesaj biçimlendirme temel olarak sizden yapılır, ancak kalıcı bağlantılarda mesaj hamdir ve tokenleştirilir ve ileri geri ayrıştırılır. İleti boyutu önemliyse, kalıcı bir bağlantının yükünün bir hub'dan çok daha az olduğunu da unutmayın.

İletişim modeli söz konusu olduğunda, kalıcı bağlantılar temel olarak mesajlaşma gönderme ve alma işlevi görürken, hub'lar uzaktan yordam çağrısı alır gereksinim başına benzersiz işlevli modeli alır.

Kalıcı bağlantılar daha düşük seviyeli olduğu için özelleştirme söz konusu olduğunda, özelleştirme üzerinde size daha fazla kontrol verebilirler.

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.