TsgcWebSocketClient › Methoden › WriteData
Sendet eine Textnachricht an den WebSocket-Server, optional in Fragmente einer bestimmten Größe aufgeteilt.
procedure WriteData(const aText: String; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Typ | Beschreibung |
|---|---|---|
aText | const String | Die Textnutzlast, die als WebSocket-Text-Frame an den Server gesendet werden soll. |
aSize | const Integer | Optionale Fragmentgröße in Bytes; wenn größer als null, wird die Nachricht in mehrere Fragmente dieser Größe aufgeteilt. Verwenden Sie 0 (Standard), um die gesamte Nachricht als einzelnen Frame zu senden. |
aStreaming | const TwsStreaming | Streaming-Modus für die fragmentierte Übertragung (stmNone, stmStart, stmContinue, stmFinish). Standard ist stmNone, was eine vollständige eigenständige Nachricht sendet. |
WriteData überträgt die Zeichenfolge als WebSocket-Text-Frame auf der aktiven Verbindung. Standardmäßig läuft der Aufruf auf dem aufrufenden Thread und kehrt zurück, sobald die Bytes an den Socket übergeben wurden. Wenn QueueOptions.Text auf einen anderen Wert als qmNone gesetzt ist, wird die Nachricht in eine Warteschlange gestellt und tatsächlich vom eigenen Thread der Verbindung gesendet, was Sperren verhindert, wenn mehrere Threads gleichzeitig schreiben. Jede Socket-Exception wird an OnError weitergeleitet. Verwenden Sie die Stream-Überladung beim Senden großer Payloads oder binärer Daten.
Wenn der Client nicht verbunden ist oder sein WebSocket-Handshake noch nicht abgeschlossen ist, wird nichts gesendet, und der Fehlschlag wird über OnError mit Connection = nil und dem Fehler Data not sent, the client is not connected or its handshake has not completed. gemeldet (resourcestring S_ERROR_CLIENT_NOT_CONNECTED). Das Ereignis wird auf dem aufrufenden Thread ausgelöst, bevor WriteData zurückkehrt, und LastError enthält denselben Text. Es wird keine Ausnahme an den Aufrufer weitergegeben, und der Client wird nicht getrennt. Setzen Sie Options.RaiseDisconnectExceptions auf False, um diese Meldung zu überspringen und die Nachricht stillschweigend zu verwerfen, wie es frühere Versionen taten. Wenn ein Schreibvorgang fehlschlägt, weil seine Verbindung verloren ging und der Client bereits erneut verbunden ist, wird der Fehlschlag ebenfalls mit Connection = nil gemeldet, sodass die neue Verbindung geöffnet bleibt.
oClient.WriteData('My First sgcWebSockets Message!.');
procedure WriteData(const aStream: TStream; const aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone);
| Name | Typ | Beschreibung |
|---|---|---|
aStream | const TStream | Quellstream, dessen Inhalt als WebSocket-Binär-Frame gesendet wird. Der Aufrufer bleibt der Eigentümer des Streams. |
aSize | const Integer | Optionale Fragmentgröße in Bytes; wenn größer als null, wird der Stream in mehrere Fragmente dieser Größe aufgeteilt. Verwenden Sie 0 (Standard), um den gesamten Stream als einzelnen Frame zu senden. |
aStreaming | const TwsStreaming | Streaming-Modus für die fragmentierte Übertragung (stmNone, stmStart, stmContinue, stmFinish). Standard ist stmNone, was eine vollständige eigenständige Nachricht sendet. |
WriteData liest den bereitgestellten Stream ab seiner aktuellen Position und überträgt den Inhalt als binären WebSocket-Frame. Der Aufruf läuft standardmäßig auf dem aufrufenden Thread; wenn QueueOptions.Binary auf einen anderen Wert als qmNone gesetzt ist, wird die Nachricht in eine Warteschlange gestellt und tatsächlich vom Verbindungs-Thread aus gesendet. Socket-Ausnahmen werden abgefangen und an OnError weitergeleitet. Wenn der Client nicht verbunden ist oder sein Handshake noch nicht abgeschlossen ist, wird nichts gesendet, und der Fehlschlag wird über OnError mit Connection = nil gemeldet, wie für die Text-Überladung beschrieben. Geben Sie den Stream erst frei, nachdem der Aufruf zurückgekehrt ist (oder, beim Verwenden einer Warteschlange, nachdem der Sendevorgang abgeschlossen ist).
oStream := TMemoryStream.Create;
try
oStream.LoadFromFile('payload.bin');
oClient.WriteData(oStream);
finally
oStream.Free;
end;