Socket.IO is een JavaScript-bibliotheek voor realtime webtoepassingen. Het maakt realtime, bidirectionele communicatie mogelijk tussen webclients en servers. Het bestaat uit twee delen: een client-side bibliotheek die in de browser draait en een server-side bibliotheek voor Node.js. Beide componenten hebben een bijna identieke API. Net als Node.js is het gebeurtenisgestuurd.
0: open (Verzonden door de server wanneer een nieuw transport wordt geopend (hercontrole))
1: close (verzoek om dit transport te sluiten, maar sluit de verbinding zelf niet.)
2: ping (Verzonden door de client. De server dient te antwoorden met een pong-pakket met dezelfde gegevens)
voorbeeld
client verzendt: 2probe
server sends: 3probe
3: pong (Verzonden door de server als antwoord op ping-pakketten.)
4: string message (het eigenlijke bericht, client en server moeten hun callbacks met de gegevens aanroepen.)
voorbeeld:
42/chat,["join","{room:1}"]
4 is het berichtpakkettype in het engine.io-protocol
2 is het EVENT-type in het socket.io-protocol
/chat zijn de gegevens die worden verwerkt door socket.io
socket.io activeert de "join"-gebeurtenis
wordt "room: 1"-data doorgegeven. U kunt de namespace weglaten alleen wanneer deze / is.
5: upgrade (Voordat engine.io schakelt naar een transport, test het of server en client over dit transport kunnen communiceren. Als deze test slaagt, stuurt de client een upgradepakket dat de server vraagt zijn cache op het oude transport leeg te maken en over te schakelen naar het nieuwe transport.)
6: noop (Een noop-pakket. Wordt voornamelijk gebruikt om een peilcyclus te forceren wanneer een inkomende WebSocket-verbinding wordt ontvangen.)
API: specifies SocketIO version:
ioAPI0: ondersteunt socket.io 0.*-servers (standaard geselecteerd)
ioAPI1: ondersteunt socket.io 1.*-servers
ioAPI2: ondersteunt socket.io 2.*-servers
ioAPI3: ondersteunt socket.io 3.*-servers
ioAPI4: ondersteunt socket.io 4.*-servers
Base64: indien ingeschakeld, worden binaire berichten ontvangen als base64.
HandShakeCustomURL: maakt het aanpassen van de URL mogelijk om de socket.io-sessie te verkrijgen.
HandShakeTimestamp: schakel dit alleen in als u de tijdstempel als parameter wilt verzenden wanneer een nieuwe sessie wordt gevraagd (schakel deze eigenschap in als u probeert toegang te krijgen tot een gevent-socketio Python-server).
HandShakeAuthToken: als de server een token vereist voor authenticatie, stel hier het authenticatietoken in.
Naamruimte: maakt het mogelijk een naamruimte in te stellen bij verbinding met de server.
Polling: door deze eigenschap uit te schakelen, maakt de client rechtstreeks verbinding met de server via WebSocket als transport.
Parameters: hiermee kunt u verbindingsparameters instellen.
EncodeParameters: indien ingeschakeld, worden parameters gecodeerd.
Gebruik de methode WriteData om berichten te verzenden naar de socket.io-server (zie de sectie Berichttypen).
1. Roep de methode "add user" aan met één parameter waarbij John als gebruikersnaam wordt gebruikt.
WriteData('42["add user", "John"]');
Voordat een nieuwe websocket-verbinding tot stand wordt gebracht, vereist de socket.io-server dat de client een nieuwe HTTP-verbinding opent om een nieuwe sessie-id te verkrijgen. In sommige gevallen vereist de socket.io-server verificatie met HTTP-headers. U kunt deze gebeurtenis gebruiken om aangepaste HTTP-headers toe te voegen, zoals Basic-autorisatie of Bearer-tokenauthenticatie.
Deze gebeurtenis wordt aangeroepen nadat de socket.io-verbinding succesvol is en de client berichten naar de server kan sturen. Hier kunt u zich bijvoorbeeld abonneren op namespaces.
Wanneer een WebSocket-server beveiligde verbindingen vereist, kan de volgende foutmelding verschijnen wanneer een client verbinding probeert te maken met de server:
Fout bij verbinden met SSL. error:XXXXXXXX:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Deze fout betekent dat uw client probeert verbinding te maken met een TLS-versie die niet wordt ondersteund door de server.
Om deze fout op te lossen, moet u OnSSLAfterCreateHandler van het WebSocket-clientcomponent afhandelen en een nieuwere TLS-versie instellen.
Voorbeeld: hier stellen we TLS 1.2 in als een protocolversie.
procedure TfrmWebSocketClient.SOCKETIOHTTPConnectionSSL(Sender: TObject;
aSSLHandler: TIdSSLIOHandlerSocketBase);
begin
TIdSSLIOHandlerSocketOpenSSL(aSSLHandler).SSLOptions.Method := sslvTLSv1_2;
end;