2012-12-30 9 views
10

Sono principiante in Angular.js e Node.js, ma mi sono reso conto che esistono due modi per creare applicazioni in tempo reale. Il primo utilizza Socket.io e l'altro utilizza RESTful con la funzione setInterval() come soluzione lato client. Ho creato la mia applicazione utilizzando entrambe le alternative, ma non so perché è meglio usarne una invece l'altra.Qual è il modo migliore per creare applicazioni in tempo reale utilizzando Angular.js e Node.js?

mio controller utilizzando Angular.js (Socket.io alternativa):

function MyController($scope, socket) { 

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

} 

mio controller utilizzando Angular.js (in alternativa RESTful):

function MyController($scope, $http) { 

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

} 

Quali sarebbero le differenze tra questi modi di fare le cose? Grazie in anticipo!

risposta

8

Se si desidera un'applicazione Web completamente in tempo reale, le prese sono la soluzione giusta. Socket.io o SockJS sono entrambi ottimi clienti. Hanno la capacità di degradare con garbo quando i socket Web non sono supportati, tuttavia, puoi scegliere il metodo di trasporto che desideri utilizzare.

Dovrai creare un servizio di sottoscrizione dati per le modifiche da propagare tra tutti gli utenti. Tower.js e Meteor utilizzano entrambi un approccio reattivo e utilizzano listener di eventi sulle modifiche del modello. A seconda di quanto sia complessa, o quanto potente questa funzione, saranno disponibili diverse implementazioni.

Diventa sempre più complesso quando si tenta di sincronizzare i dati lato client e lato server tra più utenti connessi contemporaneamente. Ti suggerisco di dare un'occhiata a questi due framework, vedere come funzionano e possibilmente replicarne parti o tutte le funzionalità.

2

È meglio usare Socket.io nel tuo caso.

Perché sembra che si interagisca molto con il backend. Se è così invece di interrogare l'api in intervalli basta usare Socket.io.

L'utilizzo del socket ridurrà il lavoro sia sul lato back-end che sul lato client e inoltre renderà molto più semplice controllare le cose basate sugli eventi.

3

Abbiamo dovuto scegliere un'alternativa tra pusher (utilizzando Websocket) e Pubnub che utilizza Ajax per pubblicare/sottoscrivere eventi in tempo reale. La tua alternativa Angular RESTful non è sufficiente quando cerchi di fare comunicazioni in tempo reale tra diversi utenti dell'applicazione. Ad esempio, hai un'applicazione di gestione del progetto utilizzata da un team. Un membro del team potrebbe aggiungere/aggiornare un'attività mentre un altro potrebbe guardare allo stesso tempo. L'aggiornamento deve essere pubblicato e tutti gli altri utenti che sono attualmente loggati saranno abbonati per l'evento modificato e potranno essere avvisati.

Abbiamo utilizzato Pubnub e funziona molto velocemente anche se la tecnologia di Pusher è migliore ma non supportata da tutti i browser al momento.

So che la domanda è per AJ e NodeJS ma ritengo che l'utilizzo di un'API di sottoscrizione/pubblicazione di terze parti rende più facile la gestione perché non dovrai gestire il server nodejs e il carico maggiore (quando la tua app popolare). Pusher/Pubnub è scalabile e puoi ridimensionare l'app il più a lungo possibile.

2

Socket.io presenta i seguenti vantaggi:

  • meno inutili trafic e rendendo
  • bassa latenza
  • (discutibilmente) codice più pulito

REST ha questi vantaggi:

  • Supportato su tutti i browser e clienti
  • connessioni meno aperta
  • funziona meglio in cluster, proxy e altrimenti complesse topologie di rete

Ognuno di questi punti merita una lunga discussione su di essa la propria, alcuni dipendono molto dalle caratteristiche applicative.Ma se li tagga per priorità, vedrai quello che è probabilmente il migliore per te.

6

In base al tuo caso d'uso, penso che Socket.IO sia la strada da percorrere. Tuttavia, ci sono alcune avvertenze sull'uso di WebSockets con Angular. Vi consiglio di dare un'occhiata a un post sul blog che ho scritto sull'argomento qualche tempo fa: http://briantford.com/blog/angular-socket-io.html

Problemi correlati