サーバープッシュは、特にアプリケーションがクライアントにリアルタイムでデータを送信する必要がある場合、バックエンド開発中の一般的な要件です。 PHPは、WebSocketとサーバーセントイベント(SSE)の2つのテクノロジーをサーバープッシュすることができます。これらの2つのテクノロジーには、独自の利点と短所があり、適切な技術を選択すると、実際の開発における問題の解決に役立ちます。
WebSocketは、クライアントとサーバーの間の永続的な接続を確立する完全な二重プロトコルであり、リアルタイムで双方向データ伝送を実行できます。 PHPでは、Swoole拡張機能を使用してWebSocketを実装できます。
まず、スウール拡張機能がインストールされていることを確認してください。これは次のコマンドでインストールできます。
PECLインストールSwoole
次に、PHPでWebsocketサーバーを作成します。次のコードを参照できます。
$ server = new swoolewebsocketserver( "0.0.0.0"、9501); $ server-> on( "open"、function(swoolewebsocketserver $ server、$ request){ エコー「接続」; }); $ server-> on( "message"、function(swoolewebsocketserver $ server、$ frame){ echo "受信メッセージ:{$ frame-> data}"; // logic $ server-> push($ frame-> fd、 "server message"); }); $ server-> on( "close"、function(swoolewebsocketserver $ server、$ fd){ エコー「切断」; }); $ server-> start();
このコードは、オープン、メッセージ、クローズの3つのイベントコールバックを定義するWebSocketサーバーを作成します。メッセージイベントコールバックでは、サーバーは受信したメッセージに基づいてデータを処理およびプッシュできます。
サーバーセントイベント(SSE)は、サーバーがクライアントにデータフローをプッシュできるようにする一方向の通信プロトコルです。 SSEを使用する場合、クライアントはサーバーからメッセージを受信することができ、サーバーにデータを積極的に送信することはできません。
SSEの実装の例は次のとおりです。
ヘッダー( "Content-Type:Text/Event-Stream"); ヘッダー( "キャッシュコントロール:ノーキャッシュ"); Header( "Connection:Keep-Alive"); $ count = 0; while(true){ echo "data:{$ count} \ n \ n"; フラッシュ(); // logic $ count ++をプッシュします。 寝る(1); }
上記のコードでは、応答ヘッダー情報を設定し、無限のループを使用して定期的にデータをクライアントにプッシュします。遅延を設定することにより、プッシュの頻度を制御できます。
WebSocketまたはSSEを使用するかどうかにかかわらず、PHPはサーバープッシュ機能を実装できます。 WebSocketは双方向のリアルタイム通信に適していますが、SSEは単方向のデータフローに適しています。開発者は、特定のニーズに基づいて適切なテクノロジーを選択し、実際のシナリオに基づいてプッシュロジックを書き込むことができます。