Server-Sent Events(SSE)

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 を使用できます。

SSE のユースケース

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

ライブフィード

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

株価ティッカー

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

通知システム

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

ログストリーミング

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

ビルドステータス更新

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

Delphi SSE サンプル

SSE エンドポイントに接続して、サーバーからプッシュされたイベントを受信します。

uses
  sgcSSE_Client, sgcSSE_Classes;

var
  SSEClient: TsgcSSEClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SSEClient := TsgcSSEClient.Create(nil);
  SSEClient.URL := 'https://api.example.com/events';

  // Configure reconnection
  SSEClient.Options.RetryInterval := 3000;
  SSEClient.Options.AutoReconnect := True;

  // Set up event handlers
  SSEClient.OnSSEConnect := OnSSEConnect;
  SSEClient.OnSSEEvent := OnSSEEvent;
  SSEClient.OnSSEDisconnect := OnSSEDisconnect;
end;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
  SSEClient.Connect;
end;

procedure TForm1.OnSSEConnect(Sender: TObject);
begin
  Memo1.Lines.Add('Connected to SSE stream');
end;

procedure TForm1.OnSSEEvent(Sender: TObject;
  aEventName, aData, aLastEventId: string);
begin
  // Handle incoming server-sent events
  if aEventName = 'price-update' then
    UpdatePrice(aData)
  else if aEventName = 'notification' then
    ShowNotification(aData)
  else
    Memo1.Lines.Add(aEventName + ': ' + aData);
end;

procedure TForm1.OnSSEDisconnect(Sender: TObject);
begin
  // Auto-reconnect will handle reconnection
  Memo1.Lines.Add('Disconnected. Reconnecting...');
end;

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

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