SignalR User Connections Yönetimi En Etkili Yöntemler
SignalR User Connections Yönetimi En Etkili Yöntemler
SignalR ve Bağlantı Yönetiminin Önemi
Gerçek zamanlı web uygulamaları geliştirenler için SignalR kullanıcı bağlantıları yönetimi anahtar bir konudur. Özellikle anlık bildirim, sohbet ya da oyun gibi çoklu kullanıcıların aynı anda etkileşimde bulunduğu sistemlerde, her kullanıcının bağlantısının güvenli, kararlı ve yönetilebilir olması gerekmektedir. SignalR ile kullanıcıların bağlantılarını doğru yönetmek; mesajların doğru kullanıcıya, ölçeklenebilir ve tutarlı biçimde ulaşmasını sağlar.
User Connections Yönetimi Nasıl Yapılır?
Kullanıcı ve Bağlantı ID İlişkisi Oluşturma
SignalR'da bir kullanıcı birden fazla cihazdan veya tarayıcı penceresinden sisteme bağlanabilir. Bu yüzden genellikle bir kullanıcının birden fazla bağlantı ID'si olabilir. Aşağıdaki örnekte, kullanıcıların bağlantı ID'lerinin bir sözlükte tutulması gösterilmektedir:
private static readonly Dictionary<string, HashSet<string>> _userConnections = new();
public override Task OnConnectedAsync()
{
string userName = Context.User.Identity.Name;
string connectionId = Context.ConnectionId;
lock(_userConnections)
{
if (!_userConnections.ContainsKey(userName))
{
_userConnections[userName] = new HashSet<string>();
}
_userConnections[userName].Add(connectionId);
}
return base.OnConnectedAsync();
}
Bağlantı Kesildiğinde Yönetim
Kullanıcı bağlantısı koptuğunda veya sistemden ayrıldığında ilgili bağlantı ID'sinin bağlantı listesinden çıkarılması gerekmektedir.
public override Task OnDisconnectedAsync(Exception exception)
{
string userName = Context.User.Identity.Name;
string connectionId = Context.ConnectionId;
lock(_userConnections)
{
if (_userConnections.ContainsKey(userName))
{
_userConnections[userName].Remove(connectionId);
if (_userConnections[userName].Count == 0)
{
_userConnections.Remove(userName);
}
}
}
return base.OnDisconnectedAsync(exception);
}
Belirli Kullanıcıya Mesaj Gönderme
SignalR user connections yönetimi kapsamında, kullanıcıya özel mesaj göndermek için aşağıdaki gibi bir yaklaşım kullanılabilir:
public Task SendMessageToUser(string userName, string message)
{
if(_userConnections.ContainsKey(userName))
{
foreach(var connectionId in _userConnections[userName])
{
Clients.Client(connectionId).SendAsync("ReceiveMessage", message);
}
}
return Task.CompletedTask;
}
Sonuç ve En İyi Uygulamalar
SignalR user connections yönetimi konusunda, bağlantıların eşzamanlı güncellenmesi, bellek veya dağıtık sistemde senkronizasyonu oldukça önemlidir. Büyük ölçekli uygulamalarda bu yönetimi in-memory yerine dağıtık cache (örn. Redis) ile yapmak gereklidir. SignalR user connections yönetimini başarıyla uygulayarak, uygulamanızda yüksek performans, güvenlik ve esneklik sağlayabilirsiniz.

Yorum Gönder