是否可以建立特定于会话的 SIgnalR 连接?

Is it possible to make a session-specific SIgnalR connection?

让我们假设我正在使用 SignalR 实现访客计数器。每当有新访客到达时,静态变量就会递增,而每当访客离开建筑物时,静态变量就会递减。我想知道连接是否是特定于会话的,所以我可以在创建新会话时递增计数器,并在不再连接会话时递减计数器。

这意味着每当用户成功登录或打开浏览器中的第一个选项卡时,计数器应该递增,而每当浏览器中的最后一个此类选项卡关闭时,计数器应该递减.我可以这样做:

我想知道开箱即用的 SignalR 是否可行,以便 SignalR 跟踪与 sessionid 的连接。是吗?

考虑到您正在使用 Hub 类,您可以通过使用服务器端事件和相应的处理程序(例如 OnConnectedOnDisconnected.

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 中,您可以减少每当连接为 destroyed/stopped 时调用的变量。

除此之外,您还可以将 User, Group 和连接信息保存在 SQL 服务器等外部存储器中,并对其进行显式跟踪。