c# - Signalr Connect 断开并重新连接

标签 c# asp.net-mvc signalr

我想确保我为 SignalR 库正确实现了组功能。

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

Collaboration 
(
    UserID Uniqueidentifier,
    ProjectID INT
)

如果任何一个用户进入协作模式,我想将该用户添加到一个组中,这样如果另一个用户登录并进入协作模式,他们将被添加到同一个组中。这些组始终命名为 ProjectID

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


这是我的问题:

当用户从客户端连接并调用 OnConnected 时,如果不存在具有 projID 的组,这会引发错误还是信号器会即时创建该组?

    public override Task OnConnected(string projID)
    {
        return Groups.Add(this.Context.ConnectionId, projID);
    }

当客户端关闭浏览器时,是调用 OnDisconnected 的时候吗? 如果该用户由于某种原因不在上述 projID 组中,是否会抛出错误或信号器会处理此问题?

    public override Task OnConnected(string projID)
    {
        return Groups.Add(this.Context.ConnectionId, projID);
    }

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

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

对于上面的所有方法,我是否需要调用每个重写方法的基方法?

最佳答案

  1. SignalR 将在您调用 Groups.Add() 时创建组 第一次针对特定的 projID。它不会引发错误。
  2. OnDisconnected 在连接断开时被调用。如果你 调用 Stop() 有一个干净的断开连接和 OnDisconnected 方法被立即调用。如果你只是关闭浏览器, OnDisconnected 方法通常会在延迟 大约 30 秒(有一个配置开关来控制这个)
  3. 用户根据他们的连接 ID 绑定(bind)到特定的组。如果 用户返回时必须使用不同的连接 ID 再次将其添加到适当的组中。你可以看看 SignalR 提供的聊天示例,以了解此类情况如何 得到处理。

关于c# - Signalr Connect 断开并重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14924733/

相关文章:

c# - 如何以编程方式滚动 WPF ListView ?

c# - Physics2D.Raycast 返回 null

javascript - C# 的 Jquery 效果

asp.net-mvc - 限制每个 Action 的 HTTP 动词

javascript - $scope.$apply 未在页面刷新时更新

c# - 视口(viewport)原点动画

c# - ASP.NET MVC 级联组合框

c# - 重定向到操作并传递引用类型

azure - 函数 'SignalR' 的监听器无法启动。 Azure 函数与信号器绑定(bind)

android - 向移动 whiteout APNS 或 GCM 发送推送通知