0

我很好奇 SignalR 如何将请求映射到集线器?

它如何选择要使用的集线器?请求中集线器的名称在哪里?

此外,它如何选择集线器中的哪个操作来处​​理请求?那是请求网址的一部分吗?

最后有没有办法利用这个管道(例如 IActionFilter、IHubSelector、IActionSelector)?

4

2 回答 2

2

SignalR 是开源的。您可以在此处找到您要查找的大部分内容: https ://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Core/Hubs

从传入通道的此行开始:

https://github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Core/Hubs/HubDispatcher.cs#L145

祝你好运!

于 2013-09-10T05:43:49.390 回答
2

它通过以下方式获取集线器的类型:

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,然后通过依赖解析器解析其类型属性。

于 2013-09-12T05:24:39.270 回答