TsgcWebSocketLoadBalancerServerメソッド › WriteData

WriteData メソッド

接続 GUID によって識別された単一のクライアントに WebSocket メッセージを送信し、そのセッションを所有するバックアップサーバーを通じてフレームをルーティングします。

オーバーロード

オーバーロード 1

構文

function WriteData(const aGuid, aMessage: string): Boolean;

パラメータ

名前タイプ説明
aGuidconst stringクライアントハンドシェイクが完了したときにバックアップサーバーによって割り当てられたターゲット接続の識別子。
aMessageconst stringそのクライアントに WebSocket テキストフレームとして配信するテキストペイロード。

戻り値

指定した GUID を持つ接続が登録済みバックアップサーバー上に見つかり、フレームがそのソケットに転送された場合は True、クラスター全体にアクティブな一致する接続が存在しない場合は False。(Boolean

解説

このオーバーロードは、GUIDがaGuidと一致するWebSocket接続を所有するバックアップサーバーを見つけ、テキストメッセージをその単一のクライアントに転送するようロードバランサーに要求します。GUIDはTsgcWSConnection.Guidによって公開される値であり、通常はOnConnectでキャプチャされ、アプリケーションによって保存されます。アップグレードされたWebSocketセッションのみが対象です。純粋なHTTPリクエストに属するGUIDは拒否され、Falseが返されます。QueueOptions.TextがqmNone以外の値に設定されている場合、フレームはキューに入れられ、呼び出し元のスレッドではなく接続スレッドからディスパッチされます(IOHandlerOptions.IOHandlerType = iohIOCPの場合はサポートされません)。1回の呼び出しでクラスター全体のすべてのアクティブなクライアントに到達するには、Broadcastを使用してください。

使用例


oServer.WriteData('guid', 'My First sgcWebSockets Message!.');

オーバーロード 2

構文

function WriteData(const aGuid: String; aStream: TStream; aSize: Integer = 0; const aStreaming: TwsStreaming = stmNone) : Boolean;

パラメータ

名前タイプ説明
aGuidconst Stringクライアントハンドシェイクが完了したときにバックアップサーバーによって割り当てられたターゲット接続の識別子。
aStreamTStreamクライアントへの WebSocket バイナリフレームとして送信されるコンテンツを含むソースストリーム。呼び出し元がストリームの所有者のままです。
aSizeIntegerオプションのフラグメントサイズ (バイト単位)。ゼロより大きい場合、ストリームはこのサイズの複数のフラグメントに分割されます。ストリーム全体を単一のフレームとして送信するにはデフォルトの 0 を使用してください。
aStreamingconst TwsStreamingフラグメント化された送信のストリーミングモード(stmNonestmStartstmContinuestmFinish)。デフォルトは stmNone で、完全なスタンドアロンメッセージを送信します。

戻り値

指定された GUID を持つ接続が登録済みバックアップ サーバー上で見つかり、ストリームがそのソケットに転送された場合は True。クラスター内のどこにも一致するアクティブな接続が存在しない場合は False。(Boolean

解説

このオーバーロードは、指定されたストリームから読み取られたバイナリペイロードを持つ単一の WebSocket クライアントを対象とし、セッションを所有するバックアップサーバーにロードバランサー経由でバイトをルーティングします。ストリームは現在の位置から消費され、ロードバランサーは所有権を取得しないため、呼び出し元は WriteData が返るまで(またはキューに入れる場合は送信が完了するまで)ストリームを維持する必要があります。QueueOptions.Binary が qmNone 以外の値に設定されている場合、フレームはキューに入れられ、呼び出し元のスレッドではなく接続スレッドから送信されます(IOHandlerOptions.IOHandlerType = iohIOCP の場合はサポートされません)。複数の WebSocket フレームにわたってフラグメント化する必要がある非常に大きなペイロードを送信する場合は、aSizeaStreaming と組み合わせて使用してください。

使用例


oStream := TMemoryStream.Create;
try
  oStream.LoadFromFile('payload.bin');
  oServer.WriteData('guid', oStream);
finally
  oStream.Free;
end;

メソッドに戻る