我是 signalR 的新手,正在阅读 API 并使用它。 对集线器及其上下文有点困惑。
也就是说,Hub.Context
不是HubContext
.
我能从GlobalHost.ConnectionManager.GetHubContext<THub>()
得到HubContext
Hub.Context
给了我一个我不知道如何使用的HubCallerContext
。
他们是什么关系?我怎样才能获得HubContext from Hub
或Hub from HubContext
?
不当的结果。 Hub.Context
是来自调用方的 HTTP 上下文(更像是请求上下文)。HubContext
具有映射到Hub.Groups
和Hub.Clients
的GroupManager
和Clients
。
您可以从中心外部添加到组并与客户交谈。在中心内,可以获取调用方的连接 ID,并获取与中心调用关联的 HTTP 请求上下文。在中心之外,您无法执行Context.Clients.Caller
或Context.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。
希望这有帮助!