让我们假设我正在使用SignalR实现访问者计数器。每当新访客到达时,静态变量就会递增,并且每当访问者离开建筑物时,静态变量就会递减。我想知道连接是否是特定于会话的,所以我可以在创建新会话时递增计数器,并在会话不再连接时递减它。
这意味着每当用户在登录时成功登录或打开浏览器中的第一个选项卡时,计数器应该递增,并且每当浏览器中的最后一个选项卡关闭时,计数器应该递减。我可以这样做:
我想知道SignalR是否可以开箱即用,因此SignalR会跟踪与sessionid的连接。是吗?
答案 0 :(得分:2)
考虑到您使用的是Hub
类,可以使用服务器端事件和相应的处理程序(例如OnConnected
和OnDisconnected
)来执行此操作。
public class ContosoChatHub : Hub
{
public override Task OnConnected()
{
//this is called after connection is started.
return base.OnConnected();
}
public override Task OnDisconnected()
{
//called when the connection is disconnected.
return base.OnDisconnected();
}
}
有关详情,请查看How to handle connection lifetime events in the Hub class。
更新:每当建立新连接时,SignalR框架都会自动调用OnConnected
。在那里你可以增加你的静态变量,什么不是。在OnDisconnected
中,只要连接被销毁/停止,就可以减少调用的变量。