Web アプリケーションの継続的な開発により、リアルタイム通信は最新の Web サイトおよびアプリケーションの中核機能の 1 つになりました。オンライン チャット、メッセージ プッシュ、データ監視のいずれにおいても、バックエンドでのリアルタイム データ配信が重要な役割を果たします。一般的に使用されるバックエンド開発言語である PHP には、リアルタイム通信を実装するための主な方法が 2 つあります。それは、ポーリングとロング ポーリングです。以下では、原理、実装方法、およびパフォーマンスの比較を分析します。
ポーリングは、最も基本的なリアルタイム通信ソリューションです。これは、フロントエンドがタイマーを通じてバックエンドにリクエストを継続的に送信し、バックエンドが現在のデータステータスを返すことを意味します。この方法は実装は簡単ですが、リクエストごとに接続を再確立する必要があるため、新しいデータがない場合でもリソースが無駄に消費され、効率が低くなります。
// フロントエンド
<script>
setInterval(function(){
$.ajax({
url: 'polling.php',
type: 'POST',
success: function(data){
// データ処理
}
});
}, 1000);
</script>
// 後部
<?php
// データを取得して返す
?>
ロングポーリングは、従来のポーリングを改良したものです。フロントエンドがリクエストを開始した後、バックエンドはすぐには結果を返しませんが、新しいデータ更新が検出されるまで接続を維持してから応答して返します。この方法により、無効なリクエストの数が効果的に削減され、通信効率が向上します。
// フロントエンド
<script>
function longPolling(){
$.ajax({
url: 'longPolling.php',
type: 'POST',
success: function(data){
// データ処理
longPolling();
},
error: function(){
longPolling();
}
});
}
longPolling();
</script>
// 後部
<?php
// データが更新されているかどうかを確認する
// 新しいデータがある場合は戻ります,それ以外の場合は、接続を維持し、すぐに戻らないでください。
?>
PHP リアルタイム通信の実装では、ポーリングとロングポーリングにはそれぞれ長所と短所があります。ポーリング方法はシンプルで直感的で、データ更新頻度が高いシナリオやリアルタイム要件が低いシナリオに適しています。一方、ロングポーリングは、実装が若干複雑ではありますが、パフォーマンスと同時処理能力を効果的に向上させることができます。実際のプロジェクトでは、ビジネス ニーズ、サーバー負荷、ネットワーク状況に基づいて適切な通信ソリューションを選択する必要があります。
注: 上記の例は学習の参考のみを目的としています。実際のプロジェクトでは、セキュリティ検証、タイムアウト処理、例外回復機構なども考慮する必要があります。