2013-09-09 2 views
0

Мне любопытно, как SignalR отображает запрос на концентратор?Как SignalR отображает запрос на концентратор?

Как выбрать, какой концентратор использовать? Где имя узла в запросе?

Кроме того, как он выбирает, какое действие в концентраторе получает для обработки запроса? Это часть URL-адреса запроса?

И, наконец, есть способ использовать этот трубопровод (например, IActionFilter, IHubSelector, IActionSelector)?

ответ

1

Он получает типы концентраторов через:

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, свойство которого типа затем разрешается с помощью распознавателя зависимостей.

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

Удачи!

+0

Это отличный намек +1, но все еще не полностью отвечает на вопрос. – Alwyn

Смежные вопросы