Server-Sent Events(SSE)
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 を使用できます。
単方向のサーバープッシュで十分なシナリオです。
ライブニュース、SNS の更新、コンテンツフィードをリアルタイムプッシュ配信でアプリケーションにストリームします。
リアルタイムの株価、市場データ、取引アラートを最小遅延でクライアントアプリケーションにプッシュします。
ポーリングや手動更新なしに、リアルタイムの通知、アラート、システムメッセージをユーザーに届けます。
監視とトラブルシューティングのために、アプリケーションログ、サーバーイベント、デバッグ出力をリアルタイムでストリームします。
CI/CD パイプラインのステータス、ビルドの進捗、デプロイ通知をリアルタイムで開発者ダッシュボードにプッシュします。
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;