信号器连接断开并重新连接

Fil*_* DO 3 c# asp.net-mvc signalr

我想确保我正在为SignalR库正确实现组功能.

我正在做的是允许用户为特定项目寻求帮助.启动项目的用户可以将其他用户添加到其项目的协作表中.

Collaboration 
(
    UserID Uniqueidentifier,
    ProjectID INT
)
Run Code Online (Sandbox Code Playgroud)

如果任一用户进入协作模式,我想将该用户添加到组中,因此如果其他用户登录并进入协作模式,则会将其添加到同一组中.这些组总是被命名为ProjectID.

因此,当用户登录并打开项目时,如果该项目在协作表中,我将它们添加到Groups.Add(Conext.ConnectionId,projID);


这是我的问题:

当用户从客户端连接并且如果没有存在projID的组时调用OnConnected,则会抛出错误或者信号器只是动态创建该组?

    public override Task OnConnected(string projID)
    {
        return Groups.Add(this.Context.ConnectionId, projID);
    }
Run Code Online (Sandbox Code Playgroud)

当客户端关闭浏览器时,是否在调用OnDisconnected时?如果那个用户由于某种原因不在所说的projID组中,那么这会抛出错误还是会让信号器处理这个?

    public override Task OnConnected(string projID)
    {
        return Groups.Add(this.Context.ConnectionId, projID);
    }
Run Code Online (Sandbox Code Playgroud)

对于OnReconnected,这是否意味着如果用户注销并执行其他操作然后重新登录,则会在连接丢失之前将其自动添加回他们所在的组中?

    public override Task OnReconnected(string projID)
    {
        return Clients.Group(projID).rejoined(Context.ConnectionId,
            DateTime.Now.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

对于上述所有方法,我是否需要调用每个覆盖方法的基本方法?

Abh*_*nda 7

  1. 当您Groups.Add()第一次呼叫特定时,SignalR将创建该组projID.它不会抛出错误.
  2. OnDisconnected只要连接消失,就会调用它.如果你打电话Stop()有一个干净的断开连接,OnDisconnected 立即调用该方法.如果您只是关闭浏览器,OnDisconnected通常会在大约30秒的延迟后调用该 方法(有一个配置开关来控制它)
  3. 用户根据其连接ID绑定到特定组.如果用户使用不同的连接ID返回,则必须将其再次添加到相应的组中.您可以查看SignalR提供的Chat示例,以了解如何处理此类案例.