Yanıtlar:
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ı.
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. OnReceived
Yö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 .
SignalR'yi kullanmanın iki yolu vardır: PersistentConnection
sı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.
Bu ikisini karşılaştırırken göz önünde bulundurulması gereken üç önemli nokta vardır:
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.