SignalR - HubContext and Hub.Context



我是 signalR 的新手,正在阅读 API 并使用它。 对集线器及其上下文有点困惑。

也就是说,Hub.Context不是HubContext.

我能从GlobalHost.ConnectionManager.GetHubContext<THub>()得到HubContext

Hub.Context给了我一个我不知道如何使用的HubCallerContext

他们是什么关系?我怎样才能获得HubContext from HubHub from HubContext

命名

不当的结果。 Hub.Context是来自调用方的 HTTP 上下文(更像是请求上下文)。HubContext具有映射到Hub.GroupsHub.ClientsGroupManagerClients

您可以从中心外部添加到组并与客户交谈。在中心内,可以获取调用方的连接 ID,并获取与中心调用关联的 HTTP 请求上下文。在中心之外,您无法执行Context.Clients.CallerContext.Clients.Others,因为当您在中心之外时没有呼叫者。

希望能把事情弄清楚。

HubCallerContext 是相对于当前请求的上下文。 您将无法使用 HubContext 执行以下操作:

public class MyHub : Hub
{        
    public void Foo()
    {               
        // These two are equivalent
        Clients.Caller.bar();
        Clients.Client(Context.ConnectionId).bar(); // Context.ConnectionId is the client that made the request connection id
    }
}

您无法使用 HubContext 执行这些操作的原因是,您没有 Clients.Caller,也没有 Context.ConnectionId。

但是,您可以使用HubCallerContext执行所有可以执行的操作。

将 HubCallerContext 视为请求相对的、更高级的 HubContext。

最终,当您想要将数据发送到请求上下文之外的中心客户端时,将使用 HubContext。

希望这有帮助!

最新更新