2012-12-30 13 views
10

Jestem początkujący w Angular.js i Node.js, ale zdałem sobie sprawę, że istnieją dwa możliwe sposoby tworzenia aplikacji czasu rzeczywistego. Pierwszy używa Socket.io, a drugi używa RESTful z funkcją setInterval() jako rozwiązania po stronie klienta. Zbudowałem swoją aplikację przy użyciu obu alternatyw, ale nie wiem, dlaczego lepiej jest używać jednego zamiast drugiego.Który jest lepszy sposób na budowanie aplikacji czasu rzeczywistego za pomocą Angular.js i Node.js?

Mój kontroler używając angularjs (Socket.io alternatywny):

function MyController($scope, socket) { 

    socket.on('test', function(data){ 
    $scope.data = data; 
    console.log($scope.data); 
    }); 

} 

Mój kontroler używając angularjs (alternatywny relaksującego):

function MyController($scope, $http) { 

    setInterval(function() { 
    $http.get('/test.json') 
     .success(function(data, status, headers, config) { 
      $scope.data = data; 
      console.log($scope.data); 
     }); 
    }, 1000); 

} 

Jakie byłyby różnice pomiędzy tymi sposobami robienia rzeczy? Z góry dziękuję!

Odpowiedz

8

Jeśli chcesz korzystać z aplikacji sieciowej w czasie rzeczywistym, to gniazda są do zrobienia. Socket.io lub SockJS są wyjątkowo dobrymi klientami. Mają zdolność do degradacji z gracją, gdy gniazda internetowe nie są obsługiwane, ale możesz wybrać, którą metodę transportu chcesz użyć.

Będziesz musiał zbudować usługę subskrypcji danych, aby zmiany były propagowane między wszystkimi użytkownikami. Tower.js i Meteor wykorzystują podejście reaktywne i używają detektorów zdarzeń podczas zmian modelu. W zależności od tego, jak złożona i potężna jest ta funkcja, będą dostępne różne implementacje.

Staje się coraz bardziej złożona, gdy próbuje zsynchronizować dane po stronie klienta i po stronie serwera wielu użytkowników podłączonych jednocześnie. Sugeruję, aby przyjrzeć się tym dwóm frameworkom, zobaczyć, jak działają i ewentualnie powielić jego części lub całą jego funkcjonalność.

2

Lepiej używać Socket.io w twoim przypadku.

Ponieważ wydaje się, że dużo interakcji z backendem.Jeśli to tak, zamiast zapytać api w odstępach, wystarczy użyć Socket.io.

Użycie gniazda zmniejszy pracę zarówno po stronie klienta, jak i po stronie klienta, a także znacznie ułatwi kontrolę nad zdarzeniami na podstawie zdarzeń.

3

Musieliśmy wybrać alternatywę pomiędzy pchaczem (za pomocą Websocket) a Pubnubem, który używa Ajax do publikowania/subskrybowania zdarzeń w czasie rzeczywistym. Twoja Angularowa alternatywna usługa RESTful nie wystarcza, gdy próbujesz komunikować się w czasie rzeczywistym między różnymi użytkownikami aplikacji. Na przykład masz aplikację do zarządzania projektami używaną przez zespół. Jeden członek zespołu może dodawać/aktualizować zadanie, podczas gdy inny może przyglądać się temu samemu. Aktualizacja musi zostać opublikowana, a wszyscy inni użytkownicy, którzy są aktualnie zalogowani, będą subskrybować zmienione wydarzenie i mogą zostać powiadomieni.

Używamy Pubnubu i działa bardzo szybko, chociaż technologia Pushera jest lepsza, ale nie jest obsługiwana przez wszystkie obecnie przeglądarki.

Wiem, że pytanie dotyczy AJ i NodeJS, ale uważam, że korzystanie z subskrypcyjnego/publikacyjnego API innej firmy ułatwia zarządzanie, ponieważ nie musisz zarządzać serwerem nodejs i większym obciążeniem (gdy aplikacja idzie popularny). Pusher/Pubnub jest skalowalny i można skalować aplikację tak daleko, jak chcesz.

2

Socket.io ma następujące zalety:

  • mniej niepotrzebnego Trafic i renderowanie
  • mniejsze opóźnienie
  • (prawdopodobnie) czyszczenia kodu

odpoczynek ma następujące zalety:

  • Obsługiwane we wszystkich przeglądarkach a klienci
  • Mniej otwartych połączeń
  • działa lepiej w klastrach, serwer proxy i inaczej złożonych topologii sieci

Każdy z tych punktów zasługuje na długą dyskusję na jego rękę, niektóre zależy dużo od właściwości aplikacyjnych.Ale jeśli oznaczysz je priorytetowo, zobaczysz, co jest najlepsze dla Ciebie.

6

Na podstawie Twojego przypadku użycia, myślę, że Socket.IO jest drogą do zrobienia. Istnieje jednak kilka zastrzeżeń dotyczących korzystania z WebSockets z Angular. Polecam zapoznać się z postem na blogu, który napisałem na ten temat jakiś czas temu: http://briantford.com/blog/angular-socket-io.html

Powiązane problemy