Socket.IO ist eine JavaScript-Bibliothek für Echtzeit-Webanwendungen. Sie ermöglicht die bidirektionale Echtzeitkommunikation zwischen Web-Clients und Servern. Sie besteht aus zwei Teilen: einer clientseitigen Bibliothek, die im Browser läuft, und einer serverseitigen Bibliothek für Node.js. Beide Komponenten haben eine nahezu identische API. Wie Node.js ist sie ereignisgesteuert.
0: open (Wird vom Server gesendet, wenn ein neuer Transport geöffnet wird (recheck))
1: close (Fordert das Schließen dieses Transports an, fährt aber die Verbindung selbst nicht herunter.)
2: ping (Vom Client gesendet. Der Server sollte mit einem Pong-Paket antworten, das dieselben Daten enthält)
example
Client sendet: 2probe
server sends: 3probe
3: pong (Vom Server gesendet, um auf Ping-Pakete zu antworten.)
4: String-Nachricht (eigentliche Nachricht, Client und Server sollten ihre Callbacks mit den Daten aufrufen.)
example:
42/chat,[“join”,”{room:1}"]
4 ist der Nachrichtenpakettyp im engine.io-Protokoll
2 ist der EVENT-Typ im socket.io-Protokoll
/chat ist die Daten, die von socket.io verarbeitet werden
socket.io löst das Ereignis "join" aus
übergibt die Daten "room: 1". Es ist möglich, den Namespace nur dann wegzulassen, wenn er / ist.
5: upgrade (Bevor engine.io einen Transport wechselt, testet es, ob Server und Client über diesen Transport kommunizieren können. Wenn dieser Test erfolgreich ist, sendet der Client ein Upgrade-Paket, das den Server auffordert, seinen Cache auf dem alten Transport zu leeren und zum neuen Transport zu wechseln.)
6: noop (Ein Noop-Paket. Wird hauptsächlich verwendet, um einen Poll-Zyklus zu erzwingen, wenn eine eingehende WebSocket-Verbindung empfangen wird.)
API: gibt die SocketIO-Version an:
ioAPI0: unterstützt socket.io-0.*-Server (standardmäßig ausgewählt)
ioAPI1: unterstützt socket.io 1.*-Server
ioAPI2: unterstützt socket.io-2.*-Server
ioAPI3: unterstützt socket.io-3.*-Server
ioAPI4: unterstützt socket.io 4.*-Server
Base64: wenn aktiviert, werden Binärnachrichten als base64 empfangen.
HandShakeCustomURL: ermöglicht die Anpassung der URL zum Abrufen der socket.io-Session.
HandShakeTimestamp: nur aktivieren, wenn Sie beim Anfordern einer neuen Sitzung einen Zeitstempel als Parameter senden möchten (aktivieren Sie diese Eigenschaft, wenn Sie versuchen, auf einen gevent-socketio-Python-Server zuzugreifen).
HandShakeAuthToken: wenn der Server ein Token zur Authentifizierung erfordert, setzen Sie hier das Authentifizierungs-Token.
Namespace: ermöglicht das Festlegen eines Namespace bei der Verbindung mit dem Server.
Polling: Wenn diese Eigenschaft deaktiviert ist, verbindet sich der Client direkt mit dem Server unter Verwendung von WebSocket als Transport.
Parameters: ermöglicht es Ihnen, Verbindungsparameter festzulegen.
EncodeParameters: wenn aktiviert, werden Parameter kodiert.
Verwenden Sie die WriteData-Methode, um Nachrichten an den Socket.IO-Server zu senden (gemäß dem Abschnitt Message Types).
1. Rufen Sie die Methode "add user" mit einem Parameter auf und verwenden Sie John als Benutzernamen.
WriteData('42["add user", "John"]');
Bevor eine neue WebSocket-Verbindung hergestellt wird, erfordert der socket.io-Server, dass der Client eine neue HTTP-Verbindung öffnet, um eine neue Sitzungs-ID zu erhalten. In einigen Fällen erfordert der socket.io-Server eine Authentifizierung über HTTP-Header. Sie können dieses Ereignis verwenden, um benutzerdefinierte HTTP-Header hinzuzufügen, wie Basic-Authorization oder Bearer-Token-Authentifizierung.
Dieses Ereignis wird aufgerufen, nachdem die socket.io-Verbindung erfolgreich war und der Client Nachrichten an den Server senden kann. Hier können Sie zum Beispiel Namespaces abonnieren.
Wenn ein WebSocket-Server sichere Verbindungen erfordert, können Sie eine Fehlermeldung wie diese erhalten, wenn ein Client versucht, sich mit dem Server zu verbinden:
Error connecting with SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Dieser Fehler bedeutet, dass Ihr Client versucht, sich mit einer TLS-Version zu verbinden, die vom Server nicht unterstützt wird.
Um diesen Fehler zu beheben, müssen Sie OnSSLAfterCreateHandler der WebSocket-Client-Komponente behandeln und eine neuere TLS-Version setzen.
Zum Beispiel: Hier legen wir TLS 1.2 als Protokollversion fest.
procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;