Come può una GUI visualizzare output non richiesti?

1

"Uscita richiesta" indica che un utente invia un comando a una GUI e la GUI visualizza l'output corrispondente.

In questo contesto, includo le app Web nel termine "GUI".

Tuttavia, spesso una GUI deve visualizzare l'output non richiesto.

Ad esempio, i siti Web SE / SO spesso mostrano un'icona che indica il numero di nuovi messaggi e il nuovo punteggio per la reputazione di un utente. Questo non è stato sollecitato dall'utente.

Stavo cercando di capire come è fatto:

1) Ovviamente, un DB mantiene i dati rilevanti su ciascun utente.

2) In questo DB, le righe di dati relative a un utente specifico vengono aggiornate dall'app, in risposta alle azioni degli altri utenti (nonché alle azioni proprie dell'utente).

3) Quindi, l'output, completamente non richiesto dall'utente in questione, passa allo schermo dell'utente in questione.

Ma quali concetti / tecnologie sono coinvolti nel fare il punto 3 sopra riportato?

Ad esempio, un evento si attiva? Se è così, allora quale possibile evento potrebbe essere generato nel frontend, a causa di un'azione DB?

In alternativa, il frontend esegue il polling del DB a intervalli frequenti? Questo sarebbe inefficiente.

    
posta SSteven 26.05.2018 - 18:04
fonte

1 risposta

6

Nel caso di StackExchange, la tecnologia che consente al server di inviare notifiche al client è WebSocket. Puoi verificarlo da solo: apri gli strumenti per gli sviluppatori e aggiorna la pagina; vedrai una chiamata a wss://qa.sockets.stackexchange.com/ e potrai persino guardare i frame, ovvero i messaggi inviati dal server all'utente o viceversa.

Esistono anche altre tecnologie per la comunicazione da server a client. Uno di questi è Eventi inviati dal server , quale dovrebbe essere la tua scelta predefinita su WebSocket (vedi sotto).

Mentre SSE e WebSockets sono relativamente nuovi, altre tecniche esistevano prima del 2011, in particolare il polling (cioè il client invia una richiesta AJAX su base regolare, come una volta al secondo, per recuperare gli eventi) e il polling lungo, che è una versione ottimizzata del polling in cui il numero di richieste AJAX viene drasticamente ridotto.

Esistono anche altre tecniche esoteriche (specialmente se non sei limitato solo a JavaScript), ma i quattro che ho presentato sopra dovrebbero essere sufficienti nella maggior parte dei casi. Se devi scegliere:

  • SSE dovrebbe essere la tua scelta predefinita. Facile da configurare rispetto ai WebSocket, garantisce che gli eventi siano consegnati molto velocemente rispetto al polling e che sia semplice da implementare rispetto al polling lungo. Il suo principale svantaggio rispetto a WebSocket è che le disconnessioni non sono gestite per te.

  • WebSocket è una valida alternativa quando hai bisogno della potenza della comunicazione duplex non HTTP. Con il potere arrivano i problemi relativi all'infrastruttura; a meno che tu non sappia che la tua infrastruttura di rete supporta WebSocket, potresti avere brutte sorprese durante la distribuzione per la prima volta in produzione.

  • Polling è una buona alternativa in cui non è necessario che gli eventi vengano visualizzati sul lato client quasi immediatamente. Ad esempio, se un ritardo di dieci secondi è ragionevole, il polling può essere la soluzione più efficiente, con il vantaggio principale di non mantenere una connessione permanente al server. Anche se non sembra più alla moda, il polling è ancora una scelta perfettamente valida per applicazioni specifiche.

  • Lungo polling mantiene una connessione quasi permanente al server, il che significa che è possibile scegliere il polling lungo su SSE solo quando SSE non è supportato dall'infrastruttura. In questo caso, è il momento di investire comunque in un'infrastruttura migliore.

Tuttavia, spesso, tutto questo è irrilevante.

Quello che farai in pratica è usare una libreria esistente, come socket.io , che astrae le parti interne per te. Fanno un ottimo lavoro scegliendo il mezzo giusto per trasmettere gli eventi, il che significa anche che automaticamente ricorrerebbero a tecniche più datate come il polling per browser molto datati.

    
risposta data 26.05.2018 - 19:25
fonte

Leggi altre domande sui tag