SignalR Hizmeti’ni kullanarak bir web uygulamasında otomatik güncelleştirmeleri etkinleştirme

Tamamlandı

Yoklama tabanlı web uygulaması.

Ardından, yoklamadan uzaklaşıp veri güncelleştirmelerini (oluştukları sırada) bağlı istemcilere yönlendiren bir uygulamaya doğru ilerleyeceğiz. Bu yeni tasarım, trafiği azaltır ve sadece veri değiştiğinde güncelleştirilerek daha verimli bir kullanıcı arabirimi sunar. Bu güncelleştirilmiş çözümü sunmak için kullandığımız üç teknoloji Azure Cosmos DB, Azure İşlevleri ve SignalR'dır.

  • Azure Cosmos DB: Veritabanındaki veriler değiştikçe, Azure Cosmos DB bir değişiklik akışı sunar. Azure Cosmos DB’deki değişiklik akışı desteği, değişiklikler için bir veritabanı kapsayıcısını dinleyerek çalışır. Ardından, değiştirilen belgelerin sıralanmış listesini, değiştirildikleri düzende çıkarır. Uygulamanız değişiklik akışını dinlediğinde, veri değişikliklerine otomatik olarak yanıt verebilir.

  • Azure İşlevleri: Bu işlevle özgün getStocks işlev arasındaki temel fark, işlevin verilerimizdeki değişikliklere göre tetiklenmiş olmasıdır. Önceki alıştırmada, işlevimizi istemciden gelen istekleri temel alarak tetikledik ve bir Azure Cosmos DB giriş bağlaması aracılığıyla tüm verileri geri çektik. Azure Cosmos DB tetikleyicisini kullanmak, veri alma işlemimizi otomatik olarak daha verimli hale getirir. Azure İşlevleri, bir Azure Cosmos DB değişiklik akışındaki her veri güncelleştirmesinde kod çalıştıran bir bağlama özelliği sunar. Bir işlev, değişiklik akışını dinlemeye başladığında, verilerinizin sadece veri değişikliklerini temsil eden bir alt kümesi ile çalışabilirsiniz.

  • Azure SignalR: Bu hizmet, Azure İşlevleri uygulamasından SignalR yayınlarını dinleyen istemcideki SignalR bağlantısıyla 2 yönlü iletişim sağlar.

SignalR ve kalıcı bağlantılar

Daha uygun bir tasarım, yoklamanın aksine istemci ve sunucu arasında kalıcı bağlantıların kurulmasını sağlar. Kalıcı bir bağlantının kurulması, istendiğinde sunucunun istemciye veri göndermesine olanak tanır. Bağlantının isteğe bağlı olması sayesinde ağ trafiği ve sunucudaki yük azaltılır. SignalR, bu tür mimariyi uygulamanıza kolayca eklemenize olanak tanır.

SignalR, uygulamanızın istemci ve sunucu arasındaki iki yönlü iletişimden faydalanmasına olanak tanıyan bir dizi teknolojiye yönelik soyutlamadır. SignalR, bağlantı yönetimini otomatik olarak işler ve bir sohbet odasında olduğu gibi, iletileri bağlı tüm istemcilere yayınlamanıza olanak tanır. İletileri belirli istemcilere de gönderebilirsiniz. Bağlantının her iletişimde tekrar kurulduğu klasik bir HTTP bağlantısının aksine, istemci ve sunucu arasındaki bağlantı kalıcıdır.

SignalR’nin sunduğu soyutlamanın sağladığı temel fayda, “taşıma” geri dönüşlerini destekleme şeklidir. Aktarım, istemci ile sunucu arasında iletişim kurma yöntemidir. SignalR bağlantıları standart bir HTTP isteği ile başlar. Sunucu bağlantıyı değerlendirirken en uygun iletişim yöntemi (taşıma) seçilir. İşlev, kalıcı bir bağlantı kullanarak istemciyle eşleştirildiğinde isteğe bağlı olarak ayrı istemcilerle iletişime geçebilir. Bu, gerçek zamanlı bir uygulama mimarisi için temel nitelikte bir özelliktir. Aktarımlar, istemcide kullanılabilen API'lere bağlı olarak seçilir:

  • HTML 5: HTML 5'i destekleyen istemciler için WebSockets API aktarımı varsayılan olarak kullanılır.
  • WebSockets: İstemci WebSockets'i desteklemiyorsa SignalR, Sunucu Tarafından Gönderilen Olaylar'a (EventSource olarak da bilinir) geri döner.
  • Diğer teknoloji: Eski istemciler için, iki yönlü bağlantıyı taklit etmek için Ajax uzun yoklama veya Forever Frame (yalnızca IE) kullanılır.

SignalR’nin sunduğu soyutlama katmanı uygulamanız için iki avantaj sağlar. İlk avantaj, uygulamanızın gelecekte olabilecek değişikliklerden etkilenmemesini sağlamasıdır. Web geliştikçe ve WebSockets’ten daha üstün API’ler kullanılabilir hale geldikçe uygulamanızı değiştirmeniz gerekmez. Yeni API'leri destekleyen bir SignalR sürümüne güncelleştirebilirsiniz ve uygulama kodunuzu yeniden düzenlemeniz gerekmez.

İstemcinin desteklediği teknolojilere bağlı olarak uygulamanızın düzeyini düzgün bir biçimde düşürülmesine olanak tanıması da SignalR’nin sağladığı ikinci avantajdır. WebSockets’i desteklemiyorsa Server Sent Events kullanılır. İstemci Server Sent Events’i işleyemiyorsa, Ajax long polling vb. kullanılır.

Azure Cosmos DB değişiklik akışını okuyan bir işlevden bilgi yayınlamak için SignalR'yi nasıl kullanabileceğinizi görelim.