Delphi Server-Sent Events クライアント
HTTP ベースのサーバーからクライアントへのプッシュ通知です。HTTP が動作する場所ならどこでも使える、軽量で信頼性の高いリアルタイムデータストリーミングアプローチです。
HTTP ベースのサーバーからクライアントへのプッシュ通知です。HTTP が動作する場所ならどこでも使える、軽量で信頼性の高いリアルタイムデータストリーミングアプローチです。
SSE は、永続的な HTTP 接続を介してサーバーからクライアントへデータをプッシュするシンプルで標準化された方法です。
Server-Sent Events はシンプルな HTTP 接続を使用して、サーバーからクライアントへイベントをストリームします。WebSocket とは異なり、SSE は単方向です。サーバーがデータを送信し、クライアントがそれを受信します。このシンプルさが強みで、SSE は特別な設定なしに HTTP プロキシ、ロードバランサー、ファイアウォールを通過します。ブラウザ(またはクライアントライブラリ)は再接続を自動的に処理し、イベント ID により切断後のシームレスな再開が可能です。sgcWebSockets は Delphi アプリケーションに自然に統合できる完全な SSE クライアントを提供します。
シンプルでありながら強力なサーバーからクライアントへのプッシュ通知です。
サーバーからクライアントへの一方向通信のみ ― 最もシンプルなリアルタイムアーキテクチャです。クライアントへのデータプッシュのみが必要な場合、SSE は理想的な選択肢です。
設定可能な再試行間隔を持つ組み込みの再接続ロジックです。接続が切断された場合、クライアントは自動的に再接続します。
各イベントには ID を持たせることができます。再接続後、クライアントは最後のイベント ID を送信するので、サーバーは中断した箇所から再開できます。
標準 MIME タイプとシンプルなテキスト形式です。イベントはオプションの名前付きイベントタイプを持つプレーンテキストで、生成と解析が容易です。
標準 HTTP を使用するため、SSE は特別な設定やポート開放なしに企業プロキシ、ファイアウォール、CDN を通過して動作します。
WebSocket 接続がブロックまたは制限されている環境で、軽量なフォールバックとして SSE を使用できます。
TsgcSSEParser は、任意のサイズのチャンクで送られてくる text/event-stream を読み取るため、同じコードで LLM のストリーミング応答と MCP Streamable HTTP の両方を扱えます。
単方向のサーバープッシュで十分なシナリオです。
ライブニュース、SNS の更新、コンテンツフィードをリアルタイムプッシュ配信でアプリケーションにストリームします。
リアルタイムの株価、市場データ、取引アラートを最小遅延でクライアントアプリケーションにプッシュします。
ポーリングや手動更新なしに、リアルタイムの通知、アラート、システムメッセージをユーザーに届けます。
監視とトラブルシューティングのために、アプリケーションログ、サーバーイベント、デバッグ出力をリアルタイムでストリームします。
CI/CD パイプラインのステータス、ビルドの進捗、デプロイ通知をリアルタイムで開発者ダッシュボードにプッシュします。
SSE エンドポイントに接続して、サーバーからプッシュされたイベントを受信します。
uses
sgcHTTP_SSE_Client;
var
SSEClient: TsgcSSEClient;
procedure TForm1.FormCreate(Sender: TObject);
begin
SSEClient := TsgcSSEClient.Create(Self);
SSEClient.URL := 'https://api.example.com/events';
// Configure reconnection
SSEClient.ReconnectOptions.Interval := 3000;
SSEClient.ReconnectOptions.Backoff := True;
SSEClient.ReconnectOptions.MaxInterval := 30000;
// Set up event handlers
SSEClient.OnOpen := OnSSEOpen;
SSEClient.OnEvent := OnSSEEvent;
SSEClient.OnReconnect := OnSSEReconnect;
end;
procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
SSEClient.Open;
end;
procedure TForm1.OnSSEOpen(Sender: TObject);
begin
Memo1.Lines.Add('Connected to SSE stream');
end;
procedure TForm1.OnSSEEvent(Sender: TObject; const aEvent: TsgcSSEEvent);
begin
// Handle incoming server-sent events
if aEvent.EventType = 'price-update' then
UpdatePrice(aEvent.Data)
else if aEvent.EventType = 'notification' then
ShowNotification(aEvent.Data)
else
Memo1.Lines.Add(aEvent.EventType + ': ' + aEvent.Data);
end;
procedure TForm1.OnSSEReconnect(Sender: TObject; aAttempt: Integer;
var aDelay: Integer; var aCancel: Boolean);
begin
// The client sends LastEventId, so the stream resumes where it stopped
Memo1.Lines.Add('Reconnecting, attempt ' + IntToStr(aAttempt));
end;