【问题标题】:How to join / leave a group in SignalR?如何在 SignalR 中加入/离开群组?
【发布时间】:2019-07-30 16:24:51
【问题描述】:

我在我的 Angular 项目中使用 SignalR,我可以通过调用名为 JoinGroup 的 Hub 方法加入一个组。

service.ts:

private startConnection(): any {      

    this.connection
        .start()
        .done((data: any) => {
            this.proxy.invoke('JoinGroup', 'demoGroup'); //join user to a group
        })
}

Hub.cs:

public Task JoinGroup(string groupName)
{
    return Groups.Add(Context.ConnectionId, groupName);
}

public Task LeaveGroup(string groupName)
{
    return Groups.Remove(Context.ConnectionId, groupName);
}

同样,我的中心也有离开组方法。但是,我不知道什么时候可以在客户端调用此方法,就像对 JoinGroup 所做的那样。当然我知道我的集线器中有OnConnected()OnReconnected()OnDisconnected() 方法,我可以在连接时传递组名。但我想知道如何从组中离开用户以及何时离开?

【问题讨论】:

    标签: c# asp.net-mvc angular asp.net-core signalr


    【解决方案1】:

    何时从组中删除连接取决于您的具体情况。例如,您可能希望在用户离开某个页面时从组中删除连接等。

    但组成员身份不会在不同的连接之间持续存在。这意味着您在断开 SignalR 连接时无需手动离开组。当您断开连接时(无论是有意还是由于错误),组中的所有成员资格都将丢失。引用Microsoft Docs:

    重新连接时不会保留组成员身份。连接重新建立后需要重新加入组。

    【讨论】:

    • 非常感谢您的回答。您的意思是不需要从组中删除用户吗?另一方面,我也想知道客户端是否有类似的事件可以确定调用 LeaveGroup 方法。正如它所看到的,我在 connection.on 事件上连接到一个组。离开这个小组怎么样?
    • 组是连接到服务器或服务器集群的连接集合,因此只有服务器知道组并可以从组中删除成员。客户端只能调用服务器方法从组中删除成员资格。
    • 客户端在断开连接时会自动离开所有组。是否需要手动从组中移除取决于您的业务逻辑:如果需要保持 SignalR 连接但取消订阅针对某个组的推送通知,则您需要手动调用服务器方法从组中移除。跨度>
    • 您对SignalR : Cannot access default hub methods 上的 SignalR 集线器问题有任何想法吗?
    猜你喜欢
    • 2013-06-22
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2021-01-12
    相关资源
    最近更新 更多