Modern MVC Uygulamalarında Gerçek Zamanlı Veriye İhtiyacı

Modern kullanıcılar, web uygulamalarının canlı ve duyarlı hissetmelerini bekler. Web uygulamalarının manuel yenileme veya anket yapılmasını gerektiren sayfalar, istemcinin sürekli olarak değişiklik yapmasını sağlamak için sistem içi ve daha geç saatler boyunca genişleyen özellikler için temel bir gereklilik haline gelir.

ASP.NET MVC, sunucu tarafından yapılan web uygulamaları için sağlam bir temel sağlar, ancak bir MVC uygulamasıyla entegre edildiğinde, Microsoft bu boşluğun bağlantıya dönüştürülmesine izin verir ve kullanıcı deneyimini çarpıcı bir şekilde geliştirir.

Bu makale, gerçek zamanlı veri güncellemelerini MVC uygulamaları SignalR kullanarak uygulamak için kapsamlı bir kılavuz sunar.Geçmiş ayar talimatları, gruplar ve kimlik doğrulama gibi gelişmiş özellikler, performans için en iyi uygulamalar ve gerçek dünya kullanımı durumlarına sahip olacaksınız.Sonunda, kendi MVC uygulamalarınıza güven ile bilgi kazandırmak için donanımlı olacaksınız.

SignalR Mimarisini Anlamak

Hub Modeli

SignalR, sunucu ve bağlantılı müşteriler arasındaki iletişimi yönetmek için aranmaktadır. A Hub, istemcilerin gönderdiği bir sınıfdır.0) temel sınıf.Bu nedenle, müşterilerin ağ detaylarına uygun olarak aramasını ve tüm bağlantılı müşterilere, özel gruplara veya bireysel müşterilere iletişim kurmalarını sağlamak için güçlü bir API'yi tanımlarsınız.

Ulaşım Mechanisms and Fallback

SignalR farklı tarayıcılar ve ağ ortamları arasında uyumluluk sağlamak için birden fazla taşıma protokolü destekliyor. birincil ulaşım israf:0)WebSocket), en düşük gecikme ve tam ekranlı iletişim sunar. WebSocket kısıtlamaya sahip değildir (İnternet Explorer için), ve sonunda uzun bir seansta otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak otomatik olarak işlem yapar.

Nakliye müzakeresi ilk bağlantı elhake sırasında gerçekleşir. Müşteri bir müzakere isteği gönderir ve sunucu, desteklenen taşımaların listesine yanıt verir.Müşteri daha sonra ilk önce en yetenekli ulaşımı kullanmaya çalışır.Bu işlem uygulama kodunıza şeffaftır, ancak WebSocket için bağlantı sorunları veya optimize ettiğinde yardımcı olur.

Bağlantı Yaşam döngüsü

SignalR merkezine olan her müşteri, bağlantı kimlikleri ile temsil edilir. Bir müşteri bağlanırken, sunucu, herhangi bir başlangıç işlemi gerçekleştirmek için merkezde bulunan ESFLT 1:2 olarak, aynı şekilde, [[Dönetici:2) ve [[Döneticileri işlemek ve yeniden bağlantı kurmak için kritik bir şekilde yapılandırılabilir. SignalR müşterileri otomatik yeniden bağlantı mantığını çağırabilir.Bu direnç, ağ kesintileri gerçekleştiğinde gerçek zamanlı deneyimleri korumak için kritiktir.

ASP.NET MVC Uygulamalarında Sinyal R'yi Ayarlayın

Gerekli Paketleri yüklemek

İlk adım, SignalR NuGet paketini MVC projesinize eklemektir. Bunu Paket Yöneticisi Konsol veya NuGet Paket Yöneticisi UI ile yapabilirsiniz. MVC 5 uygulama için, kullanım [[ENFLT:4). Bu paket hem sunucu-side bileşenleri hem de bir JavaScript framework veya Microsoft müşterisini kullanmayı planlıyorsanız, aynı zamanda JavaScript'i de yükleyebilirsiniz: ”

Kurulumdan sonra, aşağıdaki dosyaların projenizde mevcut olduğunu doğrulayın:

  • [Üye Tarihi: 16) – müşteri-side kütüphanesi
  • [FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=I=FONT=STRNT=IFONT=I=STRNT=I=SFONT=S=S=SFONT=STRNT=S=S=S=S=STR=S=S=S=S=S=S=S=SFONT=STR=S=S=STR][FONT=STRNT=S][/FONT=S][/FONT=STRNT=S][/FONT=SNT=SNT=SNT=SNT=S=S=S=S=S][/FONT=S=S=S=S=SNT=STRNT=STRNT=S=SNT=S=STRNT=S=S=S][FONT=S=SNT=S=S][FONT=S][FONT=S][FONT=SNT=S=S][/FONT=S=S][/FONT=S][/FONT=S][FONT=

OWIN Startup SignalR'i kayıt edin

ASP.NET MVC 5, OWIN'i orta dikkat için kullanıyor. SignalR, OWIN başlangıç sınıfında yapılandırılmalıdır.Eğer projeniz zaten bir tane eklemek ve aşağıdaki kodu içerir:

using Microsoft.Owin;
using Owin;
using YourNamespace; // Replace with your project's namespace

[assembly: OwinStartup(typeof(Startup))]

public class Startup
{
 public void Configuration(IAppBuilder app)
 {
 // Any other OWIN middleware configuration can go here.
 app.MapSignalR();
 }
}

[FONT=15] Çağrı, SignalR ortaware ve haritaları varsayılan merkez rotasını www.FLT: 16.04.2016 tarihine kadar genişletebilirsiniz.

Global.asax for Pre-OWIN Projects (Legacy)

OWIN'i desteklemeyen eski bir MVC projesi kullanıyorsanız, SignalR'yi yeni bir gelişme için her zaman OWIN başlangıç yöntemiyle yapılandırabilirsiniz.

Bir Hub oluşturmak ve Müşterilerle iletişim kurmak

Server-Side Hub Sınıfı

Bu sınıftan miras alan bir sınıf yaratarak bir merkezi tanımlayın. Bu derste, müşterilerin parametreleri kabul edebilir, sunucunun dış mantığını yerine getirebilir ve sonra müşterilere mülk kullanarak geri çağırabilirsiniz.

using Microsoft.AspNet.SignalR;
using System.Threading.Tasks;

public class LiveDataHub : Hub
{
 public async Task SendNotification(string userId, string message)
 {
 // Optionally perform server-side validation or storage
 await Clients.User(userId).receiveNotification(message);
 }

 public override Task OnConnected()
 {
 // You can associate the connection with a user/group here
 return base.OnConnected();
 }
}

Bu örnekte, merkez, belirli bir kullanıcıya mesaj gönderen tek bir yönteme sahiptir.TheETHFLT:20) yöntemi SignalR'nin yerleşik kullanıcı haritasını kullanır, bu da yapılandırılabilir (daha sonra da).

Müşteri-Side JavaScript Entegrasyon

Müşteri tarafında, SignalR JavaScript kütüphanesi ve otomatik olarak üretilen proxy senaryosuyu www.FLT:23'te içerir ve sunucu tarafından dinamik olarak üretilir ve merkez yöntemlerinize güçlü bir şekilde erişim sağlar. İşte tipik bir müşteri kurulumu:

<script src="~/Scripts/jquery.signalR-2.4.2.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
 $(function () {
 // Reference the auto-generated proxy for the hub
 var liveDataHub = $.connection.liveDataHub;

 // Define a client-side method that the hub can call
 liveDataHub.client.receiveNotification = function (message) {
 $('#notifications').append('<p>' + message + '</p>');
 };

 // Start the connection
 $.connection.hub.start().done(function () {
 console.log('Connected to SignalR hub.');
 // Optionally call a server method after connection is established
 // liveDataHub.server.sendNotification('user1', 'Hello from client!');
 }).fail(function (error) {
 console.error('SignalR connection failed: ' + error);
 });
 });
</script>

Bu yöntem, mevcut en iyi ulaşımla bağlantıyı başlatıyor.TheurFLT:26) Başarılı bir bağlantıdan sonra geri dönüş yangınları çağırıyor ve sunucu yöntemleri veya müşteri yöntemini talep etmeye başlayabilirsiniz.Her zaman bağlantı hataları özellikle üretim uygulamaları ile.

Müşteriden gelen sunucu yöntemleri

Müşteriden bir sunucu yöntemine göre, yukarıdaki tanımlanan ESFLT:28'i aramak için nesne kullanın:

$('#sendButton').click(function () {
 liveDataHub.server.sendNotification($('#userId').val(), $('#messageInput').val());
});

SignalR, JSON kullanarak parametreleri otomatik olarak seriliyor. sunucu yöntemi sunucunun thread havuzunda çalışır ve herhangi bir istisna müşteriye geri döndü.

Server-Side Kodlarından Görüntüleme Data

Kontrolcülerden ve arka plan görevlerinden

SignalR hubs genellikle kontrol edici eylemlerden, arka plan hizmetlerinden veya diğer sunucunun parçalarından çağrılmaktadır.Bir merkez yöntemi dışında gerçek zamanlı güncellemeler göndermek için, merkezi bağlama referans almanız gerekir.Bu, www.D.T:30'ı kullanıyor.

public class DataController : Controller
{
 public ActionResult Refresh()
 {
 // Simulate a data update
 string newData = GetLatestData();

 // Get the hub context and broadcast to all connected clients
 var hubContext = GlobalHost.ConnectionManager.GetHubContext<LiveDataHub>();
 hubContext.Clients.All.receiveUpdate(newData);

 return Json(new { success = true });
 }
}

Bu yaklaşım basit senaryolar için iyi çalışır. ancak uzun süreli arka plan görevleri için (örneğin, işlem kuyrukları, dış hizmetleri), merkezi bağlamına referans veren özel bir hizmet kullanmayı düşünün.You must be careful about thread security and avoid blocked the SignalR pipeline.

SignalR ile Arka Plan Hizmetleri Kullanımı

Modern ASP.NET MVC uygulamaları, SignalR'yi OWIN barındırma veya basit bir arka plan parçası ile entegre edebilirsiniz.[Döneticileri için bir veritabanı izlemek için tıklayınız.)[Döneticileri ile ilgili olarak, ASP.NET Core'u kullanarak; MVC 5 için, OWIN barındırma veya basit bir arka plan parçacığı kullanabilirsiniz). Örneğin, yeni kayıtların ortaya çıktığı zaman yayın güncelleştirmeleri için bir veritabanı izlemek için bir hizmet.

Gelişmiş SignalR Özellikler

Selective Broadcasting için Gruplar Kullanımı

Çoğu zaman, kullanıcıların alt kümesine herkesten ziyade güncellemeler göndermeniz gerekir. SignalR ASHİLM:0)gruplar[[Döneticiler 1) sunucuda yönetilen istemciler, merkezdeki yöntemleri çağırarak gruplardan katılabilir veya terk edebilir:

public class ChatHub : Hub
{
 public async Task JoinRoom(string roomName)
 {
 await Groups.Add(Context.ConnectionId, roomName);
 }

 public async Task LeaveRoom(string roomName)
 {
 await Groups.Remove(Context.ConnectionId, roomName);
 }

 public void SendToRoom(string roomName, string message)
 {
 Clients.Group(roomName).receiveMessage(message);
 }
}

Gruplar sohbet odaları, online oyun lobları veya bölüm özel panjurlar gibi özellikleri uygulamak için idealdir. Grup üyeliğinin bir bağlantıya bağlı olduğunu unutmayın, bir kullanıcı değil.Bir kullanıcı birden fazla tarayıcı sekmeye sahipse, her bağlantı gruba bağımsız olarak katılmalıdır.

Kullanıcı-Specific Messaging with Authentication

SignalR, ASP.NET Kimlik ile doğal olarak entegre edilir. Bir kullanıcı kimlik doğrulamadığında, merkezi bağlam ortaya çıkar.If you can then send a specific user using ESFLT:37.

Mevcut bir kullanıcıyı bir merkez yönteminden göndermek için:

public class PrivateMessagingHub : Hub
{
 public void SendPrivateMessage(string toUser, string message)
 {
 string fromUser = Context.User.Identity.Name;
 Clients.User(toUser).receivePrivateMessage(fromUser, message);
 }
}

Kimlik bağlantı kurulmadan önce kimlik doğrulama (kookies, jetR bağlantısının kurulmasını sağlayın) etkinleştirin.

Bir Backplane ile birlikte dışarı çıkmak

Uygulamanız birden fazla sunucuda (web çiftliğinde) çalışırken, herhangi bir sunucudan gelen mesajları geri yayınlayarak, onları çiftlikteki diğer tüm sunuculara geri döndürün. SignalR birkaç arka plan sağlayıcısı destekliyor: Redis, SQL Server, Azure Service Bus ve özel uygulama.

Redis arka uçağını, [[ŞUYGÜN BÜT:39'u kurmak ve OWIN'in başlangıcında yapılandırın:

app.MapSignalR(new HubConfiguration()
{
 EnableDetailedErrors = false
});

GlobalHost.DependencyResolver.UseRedis(new RedisScaleoutOptions("connectionString", "yourApp"));

Bir arka plan olmadan, her sunucu sadece kendi bağlantılı müşterileri bilir, bu yüzden yayınlar müşterilere tek bir sunucudan daha fazla bağlantı kurmaz.

Performans ve En İyi Uygulamalar

Miniread Hub Method Calls

Her müşteriden serileştirme için çağrı, geç saatler ve sunucunun işlemesini talep edin.Müşteriye sıkı döngülerde sunucuyu aramaktan kaçının. Bunun yerine, istemcide toplu güncelleştirmeler ve bunları makul bir şekilde gönderin. Ayrıca, her mesajda büyük maaş yüklerini geri döndürür; sadece diff verileri gönderin ve müşteri değişikliklerini izin verin.

Verimli Seriizasyon Kullanımı

SignalR, varsayılan olarak JSON'u kullanıyor. uygun olsa da JSON'un en fazla performansa ihtiyacı varsa, FR) FR) SignalR için protokol, daha küçük maaş yükleri ve CPU kullanımını azaltır.

Dağıtım İstemcileri Gracely

Her zaman müşteri odaklı yeniden bağlantı mantığı uygulayın. SignalR'in JavaScript müşterisi yeniden bağlantı kurdu, ancak yeniden deneme aralıklarını ve maksimum girişimleri özelleştirebilirsiniz. sunucu tarafında, overrideFLT:42, kullanıcılarını gruplardan uzaklaştırmak için, bu bağlantıyla ilişkili uzun süreli görevleri iptal edebilirsiniz.

Mesaj Boyutu ve Frekansı

Çok büyük mesajlar göndermek (örneğin, megabaytlar) SignalR üzerinden tavsiye edilmez, çünkü ulaşımı engeller ve diğer müşteriler için geç kalmışlığı arttırır.Eğer büyük dosyaları göndermeniz gerekiyorsa, fiş yükleme veya özel uç noktaları gibi ayrı bir mekanizma kullanın.

Gerçek Dünya Vakaları ve Örnekleri Kullanıyor

Canlı Dashboards ve Takip

SignalR, satış performansı, sunucu sağlığı veya sosyal medya gibi ölçümleri gösteren gerçek zamanlı panolar için idealdir. sunucu her birkaç saniyede güncel değerleri itebilir ve müşteri sadece UI'yi güncelleyebilir. MVC ile ilk panoya hizmet edebilir ve sonra SignalR'yi sorunsuz bir deneyim sağlamak için kullanabilirsiniz.

Anında Bildirimler

Yeni mesajlar için bildirimler, arkadaş talepleri veya sistem uyarıları, kullanıcının çevrimdışı olup olmadığının doğal bir uyumudur.Reforms for new messages, friend requests, or system uyarılar, sadece açık sekme veya cihazlardaki tüm kullanıcılara bildirimde bulunabilirsiniz. SignalR ile yerel bir depolama ile birlikte, bildirimlerin çevrimdışı olup olmadığının kaybedilmesini sağlar.

Collaborative Editing ve Whiteboarding

Birden çok kullanıcının paylaşılan bir belge veya tuval faydası üzerinde işbirliği yapması gereken uygulamalar SignalR'nin düşük gecikmeden faydalanıyor.Her düzenleme, çatışmaları yürütmek için, işletimsel Dönüşüm veya Çatışma Özgür Regred Data Type (CRDT) sunucuda uygulayabilirsiniz, ancak gerçek zamanlı taşımalar SignalR tarafından sağlanır.

Stok Tavşan ve Canlı Fiyat Beslemeleri

Finansal uygulamalar genellikle stok fiyatları veya para oranlarının alt saniye güncellemelerini gerektirir. SignalR, binlerce eş zamanlı bağlantıyı idare edebilir ve bir veri beslemesinden gelene kadar güncelleştirmeleri yapabilirler. Gruplar kullanarak, kullanıcıların belirli cihazlara abone olmalarına izin verebilir, her müşterinin aldığı mesajların hacmini azaltır.

SignalR'yi diğer Real-Time Technologies ile kıyaslamak

Raw WebSocket

Doğrudan WebSocket uygulaması size en fazla kontrol ve en düşük üst düzey verir, ancak serileştirme, seans yönetimi, geri dönüş taşımaları ve yeniden bağlantı mantığı kendiniz. SignalR tüm bunları özetler, gerçek zamanlı özellikleri geliştirmek için çok daha hızlı hale getirir.In most MVC applications, SignalR, özel bir çözüm gerektirmez.

Use.IO (Node.js)

CPU.IO, Node.js ekosistemleri için SignalR'nin eşdeğerdir. Uygulamanız Node.js'ta inşa edilirse, Connect.IO, ASP.NET MVC'yi kullanan bir ekip için, ASP.NET MVC'yi kullanan otomatik taşıma geri yükleme ve oda yönetimi sunar.

Firebase Realtime Database

Firebase, sunucu tarafında tam kontrol sağlar ve herhangi bir yerde barındırılabilir bir iş mantığına ihtiyaç duyan uygulamalar için daha uygun hale gelir.It is a cloud-based real-time database with built-in senkronizasyon to clients.It is a completely managed service, so you avoid server management, but it add satıcı kilit-in and may be more expensive at scale. SignalR provides you full control over the server side and can be host place, make it a better fit for applications that need custom business logic in the update pipeline.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Gerçek zamanlı veri güncellemelerini MVC uygulamaları ile SignalR ile uygulama, statik web sayfalarını ilgi çekici, dinamik deneyimlere dönüştürüyor. SignalR, ulaşım müzakereleri, bağlantı yönetimi ve sunucu-to-client mesajlaşması, kullanıcıların bilgilendirildiği ve bağlantılı araçlarına odaklanmanıza izin veriyor.

Bu makalede belirtilen kurulum adımlarını takip ederek, bir merkez yaratarak, müşterileri bağlayın ve gelişmiş özellikleri gruplar, kimlik doğrulama ve ölçeklendirme gibi kullanarak, mevcut MVC uygulamalarınıza güven ile gerçek zamanlı yetenekleri ekleyebilirsiniz.Daha fazla bilgi için resmi SignalR belgelerine atıfta bulunarak.

Daha fazla okuma için resmi kaynakları keşfedin: 03.ASP.NET SignalR Documentation), [[The Redis) ile etiketlendi ve [[FONTalR Hubs API Guide[FLT: 5).