AngularJS e WebSockets oltre

Ho appena letto questo post e capisco qual è la differenza. Ma ancora nella mia testa ho la domanda. Posso / devo usarlo nella stessa app / sito web? Diciamo che voglio che AngularJs recuperi i contenuti e aggiorni la mia pagina, connettendomi a un’API REST e tutte quelle cose importanti. Ma oltre a questo voglio anche una chat in tempo reale, o per triggersre eventi su altri client quando c’è un aggiornamento o un messaggio ricevuto.

Angular supporta questo? O devo usare qualcosa come Socket.io per triggersre quegli eventi? Ha senso usare entrambi? Se qualcuno potesse aiutarmi o indicarmi qualche buona lettura a riguardo se c’è uno scopo per usarli entrambi insieme.

Spero di essere abbastanza chiaro. Grazie per tutto l’aiuto.

Javascript supporta WebSocket, quindi non è necessario un ulteriore framework lato client per utilizzarlo. Si prega di dare un’occhiata a questo servizio di connessione $ dichiarato in questa applicazione AngularJS basata su WebSocket .

Fondamentalmente puoi ascoltare i messaggi:

$connection.listen(function (msg) { return msg.type == "CreatedTerminalEvent"; }, function (msg) { addTerminal(msg); $scope.$$phase || $scope.$apply(); }); 

Ascolta una volta (ottimo per richiesta / risposta):

  $connection.listenOnce(function (data) { return data.correlationId && data.correlationId == crrId; }).then(function (data) { $rootScope.addAlert({ msg: "Console " + data.terminalType + " created", type: "success" }); }); 

E invia messaggi:

  $connection.send({ type: "TerminalInputRequest", input: cmd, terminalId: $scope.terminalId, correlationId: $connection.nextCorrelationId() }); 

Di solito, poiché una connessione WebSocket è bidirezionale e ha un buon supporto , è anche ansible utilizzarla per ottenere dati dal server nel modello richiesta / risposta. Puoi avere i due modelli:

  • Publisher / Subscriber : dove il client dichiara il proprio interesse per alcuni argomenti e imposta i gestori per i messaggi con tale argomento, e quindi il server pubblica (o spinge) i messaggi ogni volta che lo ritiene opportuno.

  • Richiesta / risposta : dove il client invia un messaggio con un ID di richiesta (o un object di correlazione) e ascolta una singola risposta per tale ID di richiesta.

Tuttavia, puoi avere entrambi se vuoi e utilizzare REST per ottenere i dati e WebSocket per ottenere gli aggiornamenti.

Sul lato server, potrebbe essere necessario utilizzare Socket.io o qualsiasi framework lato server per avere un back-end con supporto WebSocket.

Come indicato nella risposta nel tuo post collegato, Angular non ha attualmente il supporto integrato per Websockets. Pertanto, è necessario utilizzare direttamente l’API Websockets o utilizzare una libreria aggiuntiva come Socket.io.

Tuttavia, per rispondere alla domanda se è necessario utilizzare sia un’API REST che Websocket in una singola applicazione Angolare, non vi è alcun motivo per cui non si possano avere richieste XmlHttpRequest standard per l’interazione con un API REST, utilizzando $ http o un altro livello dati libreria come BreezeJS, per alcune funzionalità incluse in varie parti dell’applicazione e utilizzare anche Wesockets per un’altra parte (ad es. chat in tempo reale).

Angular è progettato per aiutare a gestire questo tipo di scenario. Una soluzione tipica sarebbe quella di creare uno o più controller per gestire la funzionalità dell’applicazione e aggiornare la pagina e quindi creare servizi o fabbriche separate che incapsulino la gestione dei dati di ciascuno dei tuoi endpoint di dati (ad esempio REST api e il server di chat in tempo reale ), che vengono poi iniettati nei controller.

C’è una grande quantità di informazioni disponibili sull’utilizzo di servizi / fabbriche angolari per la gestione delle connessioni dati. Se stai cercando una risorsa che ti aiuti a guidare come build un’applicazione Angolare e dove i servizi dati si adatterebbero, ti consiglio di controllare AngyJust Styleguide di John Papa, che include una sezione sui servizi dati .

Per ulteriori informazioni su fabbriche e servizi, è ansible consultare AngularJS: Quando utilizzare il servizio anziché la fabbrica