Caratteristiche e come utilizzare i Websocket per le applicazioni real-time

Caratteristiche e come utilizzare i Websocket per le applicazioni real-time

Il socket per poter funzionare utilizza il protocollo WebSocket che crea una comunicazione bidirezionale in tempo reale tra client e server e risulta particolarmente adatto per la programmazione di un’applicazione web o anche web real-time, sempre più diffuse. Le applicazioni real-time è una tipologia di applicazione che può sfruttare connessioni a bassa latenza e alwayson, per la trasmissione rapida di informazioni in un modo precedentemente solo emulato da metodi come il polling Ajax e il long-polling, detto Comet.

I moderni sistemi di notifica si basano, infatti, su un abuso del protocollo HTTP aprendo i frame per effettuare il polling di nuovi dati dal server o utilizzando Flash per il livello di rete o per costruire tutta l’applicazione. Anche se evoluti, questi metodi hanno aspetti negativi come inefficienze o complessità. Websocket supera questi limiti, creando un protocollo che è un’estensione di quello TCP: la stessa connessione TCP che sottende l’HTTP viene usata per collegamenti full-duplex, persistenti ed efficienti, direttamente tra browser) e server web.

Caratteristiche e come utilizzare i Websocket per le applicazioni real-time

La specifica WebSocket è stabile e supportata da browser moderni come Chrome, Firefox e Internet Explorer 10. La connessione continua TCP consente di realizzare applicazioni molto reattive e connesse in modo molto più efficiente, sia per l’utilizzo delle risorse di client e server sia in fase di sviluppo, utilizzando un flusso “nativo” invece di un sistema di interrogazione a polling. Tecnicamente parlando, un WebSocket è una connessione TCP persistente, bidirezionale full-duplex, garantita da un sistema di handshaking client-key ed un modello di sicurezza origin-based. Il sistema, inoltre, maschera le trasmissioni dati per evitare lo sniffing di pacchetti di testo in chiaro.

La caratteristica bidirezionale indica che il client è connesso al server, e il server è connesso al client. Ciascuno può ricevere eventi come collegato e scollegato e possono inviare dati all’altro; quella full-duplex indica che il server e il client possono inviare dati nello stesso momento senza collisioni. Websocket possiede entrambe le specifiche. Effettua anche il client-key handshake: il client invia al server una chiave segreta di 16 byte con codifica base64.

Il server poi aggiunge una stringa e rimanda il risultato, elaborato con SHA1, al client. In questo modo, il client può essere certo che il server cui aveva inviato la sua chiave è lo stesso che apre la connessione. Per quanto riguarda la sicurezza origin-based, l’origine della richiesta WebSocket viene verificata dal server per determinare che provenga da un dominio autorizzato. Il server può rifiutare le connessioni socket da domini non attendibili.

Le API offerte da WebSocket in JavaScript definiscono un oggetto che contiene: informazioni sullo stato della connessione, che può essere “connecting”, “open”, “closing” e “closed”; metodi per interagire con la connessione WebSocket, ossia chiudere una connessione e inviare dati; eventi che vengono sollevati all’occorrenza di un evento WebSocket, quando un socket viene aperto, chiuso o riceve in risposta un messaggio di errore.

WebSockets, essendo una connessione persistente, potrebbe richiedere molte più risorse rispetto ad un web server standard. L’impatto sul bilanciamento del carico e sul firewall può essere mitigato, la specifica WebSocket permette di trasferire le connessioni: un client può connettersi a un Load Balancer che passa la connessione ad un application server per gestire l’elaborazione dei data frame.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *