Creazione di connessioni permanenti con WebSocket

Puoi utilizzare WebSocket per creare una connessione persistente da un client (ad esempio un dispositivo mobile o un computer) a un'istanza App Engine. La connessione aperta consente lo scambio di dati bidirezionale tra il client e il server in qualsiasi momento, con una latenza inferiore e un migliore utilizzo delle risorse.

WebSockets

Il protocollo WebSockets, definito nel documento RFC 6455, fornisce un canale di comunicazione full-duplex tra un client e un server. Il canale viene avviato da una richiesta HTTP(S) con un'intestazione "upgrade".

I casi d'uso tipici per WebSocket includono:

  • Aggiornamenti in tempo reale sugli eventi, ad esempio feed di social media, risultati sportivi, notizie o prezzi del mercato azionario
  • Notifiche per gli utenti, ad esempio aggiornamenti di software o contenuti
  • Applicazioni di chat
  • Strumenti di modifica collaborativa
  • Giochi multiplayer

WebSocket sono sempre disponibili per la tua applicazione senza alcuna configurazione aggiuntiva. Una volta stabilita, la connessione WebSockets scade dopo un'ora. L'utilizzo di WebSocket viene fatturato in base all'utilizzo della connessione fino al timeout o alla terminazione del socket.

Eseguire un'applicazione di esempio con WebSocket

Gli esempi di codice in questo documento descrivono come eseguire un'applicazione di esempio con Websockets.

Prerequisiti e configurazione

Segui le istruzioni riportate in Configurazione dell'ambiente di sviluppo per configurare l'ambiente e il progetto e per comprendere la struttura delle app.

Clona l'app di esempio

Copia le app di esempio sulla tua macchina locale e vai alla directory websockets:

Esegui il sample localmente

Esegui il deployment ed esegui l'esempio su App Engine

Affinità sessione

Non tutti i client supportano WebSocket. Per ovviare a questo problema, molte applicazioni utilizzano librerie come socket.io che ricorrono al polling http con client che non supportano WebSocket.

In genere, App Engine distribuisce le richieste in modo uniforme tra le istanze disponibili. Tuttavia, quando utilizzi il polling lungo HTTP, più richieste sequenziali di un determinato utente devono raggiungere la stessa istanza.

Per consentire ad App Engine di inviare richieste dello stesso utente alla stessa istanza, puoi attivare l'affinità sessione. App Engine identifica quindi le richieste inviate dagli stessi utenti ispezionando un cookie e le inoltra alla stessa istanza.

L'affinità di sessione in App Engine viene implementata secondo il criterio del "best effort". Quando sviluppi la tua app, devi sempre assumere che laffinità sessione non sia garantita. Un client può perdere l'affinità con l'istanza di destinazione nei seguenti scenari:

  • Lo strumento di scalabilità automatica di App Engine può aggiungere o rimuovere le istanze che pubblicano la tua applicazione. L'applicazione potrebbe riassegnare il carico e l'istanza di destinazione potrebbe spostarsi. Per ridurre al minimo questo rischio, assicurati di aver impostato il numero minimo di istanze per gestire il carico previsto.
  • Se l'istanza di destinazione non supera i controlli di integrità, App Engine sposta la sessione in un'istanza integra. Per ulteriori informazioni sui controlli di integrità e sulle relative opzioni di personalizzazione, consulta Suddividere i controlli di integrità.
  • L'affinità di sessione viene persa quando un'istanza viene riavviata per la manutenzione o gli aggiornamenti software. Le istanze VM dell'ambiente flessibile di App Engine vengono riavviate su base settimanale.

Poiché l'affinità sessione non è garantita, devi utilizzarla solo per sfruttare la capacità di socket.io e di altre librerie di eseguire il fallback sul polling lungo HTTP nei casi in cui la connessione sia interrotta. Non devi mai usare l'affinità sessione per creare applicazioni stateful.

Attivazione e disattivazione dell'affinità sessione

Per impostazione predefinita, l'affinità sessione è disattivata per tutte le applicazioni App Engine. L'affinità sessione è impostata a livello di versione dell'applicazione e può essere attivata o disattivata al momento del deployment.

Per attivare l'affinità sessione per la tua versione di App Engine, aggiungi la seguente voce al file app.yaml:

network:
  session_affinity: true

Una volta dipiattaforma la versione con app.yaml aggiornato, le nuove richieste inizieranno a essere pubblicate dalla stessa istanza, purché sia disponibile.

Per disattivare l'affinità sessione, rimuovi la voce dal file app.yaml o imposta il valore su false:

network:
  session_affinity: false