我很好奇 SignalR 如何将请求映射到集线器?
它如何选择要使用的集线器?请求中集线器的名称在哪里?
此外,它如何选择集线器中的哪个操作来处理请求?那是请求网址的一部分吗?
最后有没有办法利用这个管道(例如 IActionFilter、IHubSelector、IActionSelector)?
我很好奇 SignalR 如何将请求映射到集线器?
它如何选择要使用的集线器?请求中集线器的名称在哪里?
此外,它如何选择集线器中的哪个操作来处理请求?那是请求网址的一部分吗?
最后有没有办法利用这个管道(例如 IActionFilter、IHubSelector、IActionSelector)?
SignalR 是开源的。您可以在此处找到您要查找的大部分内容: https ://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Core/Hubs
从传入通道的此行开始:
祝你好运!
它通过以下方式获取集线器的类型:
IAssemblyLocator
,它返回相关的程序集。
SignalR 询问所有通过的类型的程序集:
private static bool IsHubType(Type type)
{
try
{
return typeof (IHub).IsAssignableFrom(type) && !type.IsAbstract
&& (type.Attributes.HasFlag((Enum) TypeAttributes.Public)
|| type.Attributes.HasFlag((Enum) TypeAttributes.NestedPublic));
}
catch
{
return false;
}
}
然后使用通过上述条件的类型创建IHubDescriptors
,然后通过依赖解析器解析其类型属性。