Użyłem SignalR
do osiągnięcia funkcjonalności wiadomości w czasie rzeczywistym, w kilku z moich projektów. Wydaje się, że działa niezawodnie i jest bardzo łatwy do nauczenia się obsługi.
Pokusa, przynajmniej dla mnie, to rezygnacja z rozwijania usługi Web API i używanie jej SignalR
do wszystkiego.
Wydaje mi się, że można to osiągnąć dzięki przemyślanemu projektowi, a gdyby tak było, oznaczałoby to znacznie mniej kodu klienta. Co ważniejsze, oznaczałoby to, że istniałby pojedynczy interfejs do usług, a nie podzielony interfejs, aw najgorszym przypadku można to połączyć bez zastanawiania się, kiedy rzeczy się renderują itp.
Chciałbym wiedzieć:
- Czy jest jakiś inny powód, aby nie używać SignalR zamiast wszystkich usług sieciowych oprócz wydajności?
- Czy wydajność SignalR w wystarczającym stopniu dotyczy tego, że nie miałoby to sensu?
Od dawna moim marzeniem była możliwość tłumaczenia definicji obiektów i usług po stronie serwera na kod dostępu do usług po stronie klienta bez czegoś niemądrego node.js
. Na przykład, jeśli zdefiniuję interesujący obiekt InterestingObject
i usługę do CRUD
obiektu InterestingObjectService
, mogę zdefiniować standardową trasę URL do usługi - powiedzmy „/ {nazwa_usługi} / {nazwa_metody}” - ale nadal muszę napisać kod klienta, aby uzyskać dostęp usługi. Ponieważ obiekt ma być przekazany od klienta do serwera iz powrotem, nie ma praktycznego powodu, aby miećdo jawnego zdefiniowania obiektu w kodzie klienta, nie powinno też być potrzeby jawnego definiowania tras wykonywania operacji CRUD. Wydaje mi się, że powinien istnieć sposób na ujednolicenie tego wszystkiego, aby można było napisać klienta przy założeniu, że dostęp do usługi działa od klienta do serwera iz powrotem tak transparentnie, jak w przypadku pisania WinForms lub Java Applet lub Native App lub co masz.
Jeśli SignalR jest wystarczająco dobry, aby używać go zamiast tradycyjnej usługi internetowej, może to być realnym sposobem na osiągnięcie tego. SignalR zawiera już funkcjonalność, dzięki której hub może działać tak, jak opisywana usługa, więc mogłem zdefiniować wspólną usługę podstawową (CRUD), która oferowałaby całą tę funkcjonalność od razu po wyjęciu z pudełka z pewnymi refleksjami. Wtedy mógłbym prawie uznać za pewny dostęp do usługi, oszczędzając mi irytujące ponowne pisanie kodu, aby uzyskać dostęp do czegoś, co może być dostępne na podstawie konwencji - a co ważniejsze, czas, który musiałbym poświęcić na pisanie kodu, aby określić, w jaki sposób jest on aktualizowany w DOM.
Po przeczytaniu mojej edycji wydaje mi się, że może to być trochę nonsensowne, więc nie wahaj się zapytać mnie, jeśli masz pytania dotyczące tego, o co mi chodzi. Zasadniczo chcę, aby dostęp do usługi był jak najbardziej przejrzysty.