SignalR 허브에 연결된 수신기, 클라이언트 수 가져오기
청취자 수(허브에 연결된 클라이언트)를 확인할 수 있는 방법이 있습니까?
하나 이상의 클라이언트가 연결되어 있으면 작업을 실행/시작하려고 합니다. 그렇지 않으면 시작하지 마십시오.
[HubName("taskActionStatus")]
public class TaskActionStatus : Hub, IDisconnect
{
static CancellationTokenSource tokenSource;
public void GetTasksStatus(int? siteId)
{
tokenSource = new CancellationTokenSource();
CancellationToken ct = tokenSource.Token;
ITaskRepository taskRepository = UnityContainerSetup.Container.Resolve<ITaskRepository>();
// init task for checking task statuses
var tasksItem = new DownloadTaskItem();
taskRepository.GetTasksStatusAsync(siteId, tasksItem, ct);
// subscribe to event [ listener ]
tasksItem.Changed += new EventHandler<TaskEventArgs>(UpdateTasksStatus);
}
public void UpdateTasksStatus(object sender, TaskEventArgs e)
{
Clients.updateMessages(e.Tasks);
}
// when browsing away from page
public Task Disconnect()
{
try
{
tokenSource.Cancel();
}
catch (Exception)
{
//
}
return null;
}
}
감사해요.
신호 R에서 이 카운트를 가져올 수 있는 방법은 없습니다.다음을 사용해야 합니다.OnConnect()
그리고.OnDisconnect()
사용자가 직접 카운트를 유지할 수 있는 허브의 메서드.
카운트를 고정할 정적 클래스가 있는 간단한 예:
public static class UserHandler
{
public static HashSet<string> ConnectedIds = new HashSet<string>();
}
public class MyHub : Hub
{
public override Task OnConnectedAsync()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId);
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync(Exception exception)
{
UserHandler.ConnectedIds.Remove(Context.ConnectionId);
return base.OnDisconnectedAsync(exception);
}
}
그러면 다음에서 카운트를 얻습니다.UserHandler.ConnectedIds.Count
.
버전 2.1.1<의 경우:
public static class UserHandler
{
public static HashSet<string> ConnectedIds = new HashSet<string>();
}
public class MyHub : Hub
{
public override Task OnConnected()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId);
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
UserHandler.ConnectedIds.Remove(Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
}
SIGnalR(버전 2.4.1)에서는 다음과 같이 매우 쉽습니다.
public int GetOnline()
{
return GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>().GetConnections().Count;
}
클라이언트에서 이 메서드를 호출합니다(:
이제 다음이 필요합니다.
public override Task OnConnectedAsync()
{
UserHandler.ConnectedIds.Add(Context.ConnectionId);
return base.OnConnectedAsync();
}
public override Task OnDisconnectedAsync(Exception exception)
{
UserHandler.ConnectedIds.Remove(Context.ConnectionId);
return base.OnDisconnectedAsync(exception);
}
Azure Functions 및 Azure SignalR Service와 함께 서버리스 솔루션을 사용하는 경우 다음과 같은 문제가 해결되었습니다. https://github.com/Azure/azure-functions-signalrservice-extension/issues/54
이벤트 그리드를 사용하여 실시간 연결 수를 얻을 수 있는 이 샘플을 참조합니다.https://github.com/aspnet/AzureSignalR-samples/tree/master/samples/EventGridIntegration
사용하는 내 프로젝트에서Microsoft.AspNetCore.SignalR.Core
버전1.1.0
디버그하고 카운트를 확인할 수 있습니다.
((Microsoft.AspNetCore.SignalR.DefaultHubLifetimeManager<XXX.Push.SignalR.EventHub>)((Microsoft.AspNetCore.SignalR.Internal.AllClientProxy<XXX.Push.SignalR.EventHub>)((Microsoft.AspNetCore.SignalR.TypedClientBuilder.IEventImpl)((Microsoft.AspNetCore.SignalR.Internal.HubClients<XXX.Push.SignalR.EventHub, XXX.Push.SignalR.IEvent>)_hub.Clients).All)._proxy)._lifetimeManager)._connections.Count
다음과 같이 표시됩니다.
언급URL : https://stackoverflow.com/questions/13514259/get-number-of-listeners-clients-connected-to-signalr-hub
'code' 카테고리의 다른 글
x86의 MOV가 정말 "무료"가 될 수 있습니까?왜 나는 이것을 전혀 재현할 수 없습니까? (0) | 2023.06.17 |
---|---|
여러 클래스 제거(jQuery) (0) | 2023.06.17 |
선택 옵션을 부울 값으로 변환 (0) | 2023.06.17 |
ggplot에서 일부 범례 끄기 (0) | 2023.06.17 |
이것이 메모리에서 2개의 c-string이 중복되는지 확인하는 정확하고 휴대 가능한 방법입니까? (0) | 2023.06.12 |