Delphi Server-Sent Events クライアント

HTTP ベースのサーバーからクライアントへのプッシュ通知です。HTTP が動作する場所ならどこでも使える、軽量で信頼性の高いリアルタイムデータストリーミングアプローチです。

Server-Sent Events とは?

SSE は、永続的な HTTP 接続を介してサーバーからクライアントへデータをプッシュするシンプルで標準化された方法です。

シンプルなサーバーからクライアントへのストリーミング

Server-Sent Events はシンプルな HTTP 接続を使用して、サーバーからクライアントへイベントをストリームします。WebSocket とは異なり、SSE は単方向です。サーバーがデータを送信し、クライアントがそれを受信します。このシンプルさが強みで、SSE は特別な設定なしに HTTP プロキシ、ロードバランサー、ファイアウォールを通過します。ブラウザ(またはクライアントライブラリ)は再接続を自動的に処理し、イベント ID により切断後のシームレスな再開が可能です。sgcWebSockets は Delphi アプリケーションに自然に統合できる完全な SSE クライアントを提供します。

  • 標準 HTTP を使用 ― サーバーの特別な設定は不要
  • 設定可能な再試行間隔による自動再接続
  • 中断した箇所から再開するためのイベント ID
  • プロキシ、ファイアウォール、CDN を通過して動作
SERVER CLIENT text/event-stream data: {"event": "..."}

SSE の特長

シンプルでありながら強力なサーバーからクライアントへのプッシュ通知です。

単方向ストリーミング

サーバーからクライアントへの一方向通信のみ ― 最もシンプルなリアルタイムアーキテクチャです。クライアントへのデータプッシュのみが必要な場合、SSE は理想的な選択肢です。

自動再接続

設定可能な再試行間隔を持つ組み込みの再接続ロジックです。接続が切断された場合、クライアントは自動的に再接続します。

再開のためのイベント ID

各イベントには ID を持たせることができます。再接続後、クライアントは最後のイベント ID を送信するので、サーバーは中断した箇所から再開できます。

text/event-stream

標準 MIME タイプとシンプルなテキスト形式です。イベントはオプションの名前付きイベントタイプを持つプレーンテキストで、生成と解析が容易です。

プロキシ&ファイアウォール対応

標準 HTTP を使用するため、SSE は特別な設定やポート開放なしに企業プロキシ、ファイアウォール、CDN を通過して動作します。

WebSocket フォールバック

WebSocket 接続がブロックまたは制限されている環境で、軽量なフォールバックとして SSE を使用できます。

再利用可能なパーサー

TsgcSSEParser は、任意のサイズのチャンクで送られてくる text/event-stream を読み取るため、同じコードで LLM のストリーミング応答と MCP Streamable HTTP の両方を扱えます。

SSE のユースケース

単方向のサーバープッシュで十分なシナリオです。

ライブフィード

ライブニュース、SNS の更新、コンテンツフィードをリアルタイムプッシュ配信でアプリケーションにストリームします。

株価ティッカー

リアルタイムの株価、市場データ、取引アラートを最小遅延でクライアントアプリケーションにプッシュします。

通知システム

ポーリングや手動更新なしに、リアルタイムの通知、アラート、システムメッセージをユーザーに届けます。

ログストリーミング

監視とトラブルシューティングのために、アプリケーションログ、サーバーイベント、デバッグ出力をリアルタイムでストリームします。

ビルドステータス更新

CI/CD パイプラインのステータス、ビルドの進捗、デプロイ通知をリアルタイムで開発者ダッシュボードにプッシュします。

Delphi SSE サンプル

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;
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

SSE を始める準備はできましたか?

体験版をダウンロードして、数分でサーバープッシュイベントの受信を始めましょう。