Creazione di connessioni permanenti con WebSocket

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

WebSockets

Il protocollo WebSocket, definito nella 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 di WebSocket includono:

  • Aggiornamenti sugli eventi in tempo reale, come feed di social media, risultati sportivi, notizie o quotazioni del mercato azionario
  • Notifiche per l'utente, ad esempio aggiornamenti software o di contenuti
  • Applicazioni di chat
  • Strumenti di modifica collaborativi
  • Giochi multiplayer

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

Esecuzione di un'applicazione di esempio con WebSocket

Prerequisiti e configurazione

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

Segui le istruzioni in Configurazione dell'ambiente di sviluppo per configurare l'ambiente e il progetto e per comprendere come sono strutturate le app.

Clona l'app di esempio

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

Esegui l'esempio in locale

Esegui il deployment e 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 usano i sondaggi lunghi HTTP con client che non supportano WebSocket.

App Engine in genere 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 abilitare l'affinità sessione. App Engine identifica quindi le richieste inviate dagli stessi utenti esaminando un cookie e le instrada alla stessa istanza.

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

  • Il gestore della scalabilità automatica di App Engine può aggiungere o rimuovere istanze che gestiscono la tua applicazione. L'applicazione potrebbe riallocare 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 in stato integro. Per ulteriori informazioni sui controlli di integrità e sulle relative opzioni di personalizzazione, consulta Suddividi i controlli di integrità.
  • L'affinità sessione si perde quando un'istanza viene riavviata per manutenzione o aggiornamenti software. Le istanze VM dell'ambiente flessibile di App Engine vengono riavviate su base settimanale.

Poiché l'affinità sessione non è garantita, ti consigliamo di utilizzarla solo per sfruttare la capacità di socket.io e altre librerie di ricorrere al polling HTTP lungo nei casi di interruzione della connessione. Non devi mai utilizzare 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 disabilitata al momento del deployment.

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

network:
  session_affinity: true

Una volta eseguito il deployment della versione con il file app.yaml aggiornato, le nuove richieste inizieranno a essere pubblicate dalla stessa istanza, purché quest'ultima sia disponibile.

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

network:
  session_affinity: false