API SocketIO

SocketIO

 

Socket.IO è una libreria JavaScript per applicazioni web in tempo reale. Consente una comunicazione bidirezionale in tempo reale tra client web e server. È composta da due parti: una libreria lato client che viene eseguita nel browser e una libreria lato server per Node.js. Entrambi i componenti hanno un'API quasi identica. Come Node.js, è guidata dagli eventi.

 

Tipi di Messaggi

 

0: aperto (Inviato dal server quando viene aperto un nuovo trasporto (ricontrollo))

 

1: close (Richiede la chiusura di questo trasporto ma non termina la connessione stessa.)

 

2: ping (Inviato dal client. Il server deve rispondere con un pacchetto pong contenente gli stessi dati)

esempio

il client invia: 2probe

server sends: 3probe

 

3: pong (Inviato dal server in risposta ai pacchetti ping.)

 

4: messaggio stringa (messaggio effettivo; client e server devono richiamare i propri callback con i dati.)

esempio:

42/chat,[“join”,”{room:1}"]

4 è il tipo di pacchetto messaggio nel protocollo engine.io

2 è il tipo EVENT nel protocollo socket.io

/chat è il dato elaborato da socket.io

socket.io genererà l'evento "join"

passerà i dati "room: 1". È possibile omettere il namespace solo quando esso è /.

 

5: upgrade (Prima che engine.io cambi un transport, verifica se server e client possono comunicare su questo transport. Se questo test ha esito positivo, il client invia un pacchetto di upgrade che richiede al server di svuotare la cache sul vecchio transport e passare al nuovo transport.)

 

6: noop (Un pacchetto noop. Utilizzato principalmente per forzare un ciclo di polling quando viene ricevuta una connessione WebSocket in ingresso.)

 

Proprietà

API: specifica la versione di SocketIO:

 

ioAPI0: supporta server socket.io 0.* (selezionato per impostazione predefinita)

 

ioAPI1: supporta i server socket.io 1.*

 

ioAPI2: supporta server socket.io 2.*

 

ioAPI3: supporta i server socket.io 3.*

 

ioAPI4: supporta i server socket.io 4.*

 

Base64: se abilitato, i messaggi binari vengono ricevuti come base64.

 

HandShakeCustomURL: consente di personalizzare l'URL per ottenere la sessione socket.io.

 

HandShakeTimestamp: abilitare solo se si desidera inviare il timestamp come parametro quando viene richiesta una nuova sessione (abilitare questa proprietà se si tenta di accedere a un server gevent-socketio Python).

 

HandShakeAuthToken: se il server richiede un token per l'autenticazione, imposti qui il token di autenticazione.

 

Namespace: consente di impostare un namespace quando ci si connette al server.

 

Polling: disabilitando questa proprietà, il client si connetterà direttamente al server utilizzando websocket come trasporto.

 

Parametri: consente di impostare i parametri di connessione.

 

EncodeParameters: se abilitato, i parametri vengono codificati.

 

Metodi

Utilizzare il metodo WriteData per inviare messaggi al server socket.io (seguendo la sezione Tipi di Messaggio).

1. Chiami il metodo "add user" con un parametro utilizzando John come nome utente.


WriteData('42["add user", "John"]');

Eventi

OnHTTPRequest

Prima che venga stabilita una nuova connessione websocket, il server socket.io richiede al client di aprire una nuova connessione HTTP per ottenere un nuovo id di sessione. In alcuni casi, il server socket.io richiede l'autenticazione tramite header HTTP. Può utilizzare questo evento per aggiungere header HTTP personalizzati, come l'autorizzazione Basic o l'autenticazione con token Bearer.

OnAfterConnect

Questo evento viene chiamato dopo che la connessione socket.io ha avuto esito positivo e il client può inviare messaggi al server. Qui è possibile, ad esempio, sottoscrivere i namespace.

OnHTTPConnectionSSL

Quando un server WebSocket richiede connessioni sicure, è possibile ricevere un messaggio di errore come questo quando un client tenta di connettersi al server:

Errore di connessione con SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

Questo errore significa che il Suo client sta tentando di connettersi utilizzando una versione TLS non supportata dal server.

Per risolvere questo errore deve gestire OnSSLAfterCreateHandler del componente client WebSocket e impostare una versione TLS più recente.

Ad esempio: qui stiamo impostando TLS 1.2 come versione del protocollo.


procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
    aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
  TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;