我有一个称为客户端的方法的集线器。此方法启动一个具有每10秒运行一次委托的计时器。由于如果没有人连接到集线器,继续运行此代理是没有意义的,我想在重新安排它之前检查是否有任何用户仍然从代理内部连接。有没有办法做到这一点?SignalR - 检查用户是否仍然连接
回答
也许是最常用的解决办法是保持一个静态的用户变量包含当前连接的和压倒一切的OnConnect
和OnDisconnect
或根据您使用的版本实现IDisconnect
。
你会实现这样的事情:
public class MyHub : Hub
{
private static List<string> users = new List<string>();
public override Task OnConnected()
{
users.Add(Context.ConnectionId);
return base.OnConnected();
}
//SignalR Verions 1 Signature
public override Task OnDisconnected()
{
users.Remove(Context.ConnectionId);
return base.OnDisconnected();
}
//SignalR Version 2 Signature
public override Task OnDisconnected(bool stopCalled)
{
return base.OnDisconnected(stopCalled);
}
// In your delegate check the count of users in your list.
}
从http://forums.asp.net/t/1829432.aspx/1?How+do+I+get+list+of+connected+clients+on+signalr+
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.notify("Hello world");
所以,你应该能够得到context.Clients.Count。
该帖子还引用了wiki,它有很多很好的信息。您可以尝试使用OnConnected/OnDisconnected示例来跟踪用户,当您达到零用户时停止您的呼叫。
感谢您的建议,但我试图做这来自一个中心内......它仍然会工作吗? – edobry
如果您保存您的ConnectionId在你的数据库,你可以检查此:
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);
if (connectionAlive.IsAlive)
{
//Do whatever...
}
你需要添加'使用Microsoft.AspNet.SignalR.Transports' –
也不应该.Transports是在核心大会......无赖!请参阅:https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.transports.transportmanager%28v=vs.118%29.aspx?f=255&MSPPError=-2147217396 –
- 1. Nodejs检查客户端是否仍然连接
- 2. 检查客户端是否仍然连接了socket.io ID
- 3. 如何检查插座是否仍然连接?
- 4. 检查SQLite数据库连接是否仍然打开
- 5. 如何检查HttpListenerRequest连接是否仍然打开?
- 6. Java检查,看扫描仪是否仍然连接
- 7. Delphi + Synapse:如何检查我是否仍然连接
- 8. 检查HttpServletRequest的连接是否仍然打开?
- 9. 检查连接到websocket是否仍然打开Net :: Async :: WebSocket
- 10. js检查用户是否有连接
- 11. ActionController :: LIve是否有可能检查连接是否仍然存在?
- 12. 如何检查用户是否仍然活动?
- 13. 如何检查用户是否仍然存在?
- 14. 检查会话是否仍然存在
- 15. 检查歌曲是否仍然存在
- 16. 检查是否仍然需要blob
- 17. VBScript - 检查mailItem是否仍然可行
- 18. Symfony检查用户是否仍在线
- 19. 如何在使用WNetAddConnection2时检查网络连接是否仍然存在
- 20. 检查,如果客户端仍连接
- 21. 鉴于SignalR ConnectionId,我可以告诉该会话是否仍然连接?
- 22. 客户端断开连接后,进程是否仍然继续
- 23. 检查套接字是否仍然打开
- 24. SignalR只是用于检查用户是否在线
- 25. 检查用户是否连接到Facebook,然后检查他是否喜欢页面
- 26. 检查mongoDB是否连接
- 27. 如何检查Django用户是否仍然仅从客户端登录?
- 28. SignalR - 连接/用户小组
- 29. 龙卷风异步请求超时 - 如何检查用户是否仍然连接
我在其他地方看到过这个,只是希望有更好的方法。谢谢,我会试试它! – edobry
尝试访问单个资源的多个线程是否存在并发问题? –
这不但不能可靠地工作,因为集线器的寿命模型,它打破了用背板扩展的可能性。唯一真正的答案是跟踪像redis或appfabric这样的共享缓存中的在线状态。 – Bon