Canlı Blazor oyununda sunucu zamanı yönetmeli: SignalR ve arka plan servisi dersleri
Bir geliştirici, .NET 10 üzerinde Blazor Web App ve MAUI Blazor Hybrid ile çalışan canlı bingo oyununu nasıl kurguladığını anlatıyor. Oyun yaşam döngüsünün sunucuda tutulması, zamanlayıcı tabanlı başlatma, idempotent katılım ve InteractiveAuto yeniden başlatmaları ele alınıyor. Gerçek zamanlı Blazor uygulaması geliştiren herkes için pratik dersler içeriyor.
Kilit noktalar
- Oyun yaşam döngüsü tek bir enum ile sunucuda türetilir ve SignalR ile istemcilere itilir; istemciler yalnızca ilk yüklemede yerel hesap yapar.
- Başlangıç zamanını bildiren BackgroundService, PeriodicTimer ile 15 saniyede bir çalışır ve yalnızca bağlı oturumları sorgular.
- Oyun bitişi, yayın öncesi IsEnded = true yapılarak veritabanında tek seferlik işaretlenir.
- Katılım, idempotent bir POST /api/bingo/joingame isteğiyle yapılır; yükleme sırasında GET state değiştirmez.
- InteractiveAuto bileşenleri iki kez başlayabilir; sunucu durumu her seferinde yeniden çekilmeli, JS interop kurulumu yeniden çalıştırılabilir olmalı.
Yazar, toplantılar ve sunumlar için canlı bir bingo oyunu geliştirmiş. Oyun, tek bir Razor Class Library üzerinden hem Blazor Web App sitesine hem de iPhone, Android ve Windows için MAUI Blazor Hybrid uygulamasına servis ediyor; tüm canlı iletişim SignalR ile yürüyor. Yazının ana fikri, oyun durumunun saatinin ve kurallarının sunucuda tutulması gerektiği.
Yazar, oyun aşamasını tek bir enum ile sunucuda türetip istemcilere iterek iki telefonun farklı durumları göstermesini engelliyor. Başlangıç saatini takip eden bir BackgroundService, 15 saniyelik bir PeriodicTimer ile çalışıyor; oyun bitişi veritabanında IsEnded bayrağıyla tek seferlik işaretleniyor. Katılım ayrı bir POST isteğiyle idempotent yapılıyor, iki sekme arasında ise en yeni oturum geçerli sayılıyor. InteractiveAuto bileşenlerinin iki kez başlatılabileceği de hatırlatılıyor.
Gerçek dünyada kullanımı
- Birden fazla telefondan aynı anda güncellenen canlı bir quiz, anket veya oylama uygulaması.
- Başlangıç saati olan etkinlikleri, zamanlayıcıyla sunucu tarafında duyuran Blazor Web App projeleri.
- Hem web hem MAUI Blazor Hybrid istemcisi paylaşan, tek Razor Class Library kullanan ürünler.
Neden önemli
Gerçek zamanlı bir Blazor uygulamasında durumun sahibi sunucu olmalı; istemci tarafı önbelleği ve yeniden başlayan bileşenler yanlış durum ve çift olay üretebilir. Yazının önerdiği desenler, SignalR tabanlı her uygulamada doğrudan uygulanabilir.