Socket.IO est une bibliothèque JavaScript pour les applications web en temps réel. Elle permet une communication bidirectionnelle en temps réel entre les clients web et les serveurs. Elle se compose de deux parties : une bibliothèque côté client qui s'exécute dans le navigateur et une bibliothèque côté serveur pour Node.js. Les deux composants ont une API presque identique. Comme Node.js, elle est orientée événements.
0 : ouvert (envoyé par le serveur lorsqu'un nouveau transport est ouvert (revérification))
1 : fermer (Demande la fermeture de ce transport mais ne ferme pas la connexion elle-même.)
2 : ping (Envoyé par le client. Le serveur doit répondre avec un paquet pong contenant les mêmes données)
exemple
le client envoie : 2probe
le serveur envoie : 3probe
3 : pong (Envoyé par le serveur en réponse aux paquets ping.)
4: message de type chaîne (message réel, le client et le serveur doivent appeler leurs callbacks avec les données.)
exemple :
42/chat,["join","{room:1}"]
4 est le type de paquet de message dans le protocole engine.io
2 est le type EVENT dans le protocole socket.io
/chat est la donnée traitée par socket.io
socket.io va déclencher l'événement "join"
transmettra les données "room: 1". Il est possible d'omettre l'espace de noms uniquement lorsqu'il s'agit de /.
5 : mise à niveau (avant que engine.io ne change de transport, il teste si le serveur et le client peuvent communiquer via ce transport. Si ce test réussit, le client envoie un paquet de mise à niveau qui demande au serveur de vider son cache sur l'ancien transport et de passer au nouveau transport.)
6 : noop (Un paquet noop. Utilisé principalement pour forcer un cycle de scrutation lorsqu'une connexion WebSocket entrante est reçue.)
API: spécifie la version SocketIO :
ioAPI0 : prend en charge les serveurs socket.io 0.* (sélectionné par défaut)
ioAPI1 : prend en charge les serveurs socket.io 1.*
ioAPI2 : prend en charge les serveurs socket.io 2.*
ioAPI3 : supporte les serveurs socket.io 3.*
ioAPI4 : prend en charge les serveurs socket.io 4.*
Base64 : si activé, les messages binaires sont reçus en base64.
HandShakeCustomURL : permet de personnaliser l'URL pour obtenir la session socket.io.
HandShakeTimestamp : activez uniquement si vous souhaitez envoyer un horodatage comme paramètre lors d'une nouvelle demande de session (activez cette propriété si vous essayez d'accéder à un serveur Python gevent-socketio).
HandShakeAuthToken : si le serveur nécessite un jeton pour l'authentification, définissez ici le jeton d'authentification.
Namespace : permet de définir un espace de noms lors de la connexion au serveur.
Polling : en désactivant cette propriété, le client se connectera directement au serveur en utilisant WebSocket comme transport.
Paramètres : permet de définir les paramètres de connexion.
EncodeParameters : si activé, les paramètres sont encodés.
Utilisez la méthode WriteData pour envoyer des messages au serveur socket.io (en suivant la section Types de messages).
1. Appelez la méthode "ajouter utilisateur" avec un paramètre en utilisant John comme nom d'utilisateur.
WriteData('42["add user", "John"]');
Avant qu'une nouvelle connexion WebSocket ne soit établie, le serveur socket.io exige que le client ouvre une nouvelle connexion HTTP pour obtenir un nouvel identifiant de session. Dans certains cas, le serveur socket.io nécessite une authentification via des en-têtes HTTP. Vous pouvez utiliser cet événement pour ajouter des en-têtes HTTP personnalisés, comme une autorisation Basic ou une authentification par jeton Bearer.
Cet événement est appelé après que la connexion socket.io est établie avec succès et que le client peut envoyer des messages au serveur. Vous pouvez vous abonner à des espaces de noms ici, par exemple.
Lorsqu'un serveur WebSocket requiert des connexions sécurisées, vous pouvez obtenir un message d'erreur comme celui-ci lorsqu'un client tente de se connecter au serveur :
Error connecting with SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Cette erreur signifie que votre client essaie de se connecter en utilisant une version TLS qui n'est pas prise en charge par le serveur.
Pour résoudre cette erreur, vous devez gérer OnSSLAfterCreateHandler du composant client WebSocket et définir une version TLS plus récente.
Par exemple : ici nous définissons TLS 1.2 comme version du protocole.
procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;