状況によりますが、解決策 1 を選択する必要があると思います。私がそう考える理由については、以下をお読みください。
ソリューション 1はおそらく実装が簡単なはずです。サーバーが 1 秒あたり 65,000 を超えるリクエストを処理できる場合は、これを使用する必要があります。上。
解決策 2は、競合状態、タイムアウトのために解決策 1 の上に実装する必要があるため、実装がおそらく難しいでしょう (少なくともクライアント側ですが、サーバーをどれだけ制御できるかによってはサーバー側も同様です)。 . 利点は、正しく実行された場合、ソリューション 1 よりもはるかに効率的である可能性があることです。つまり、ポート制限に達するまでは (標準的な単一サーバーの LAMP セットアップではおそらく実行しないでしょう)。
解決策 2 に関しては、websockets を使用することもできます。これにより、クロスブラウザーの問題を犠牲にして、いくつかの問題 (正しく行うとタイムアウト) を回避し、パフォーマンスを向上させることができます。
php と何らかの形式の sql (おそらく mysql を意味すると思います) を使用すると言うように、解決策 1 を使用します。 php の歴史) では、パフォーマンスなどはあまり考えずに、やり遂げることについて考えるべきであり、その点では、解決策 1 の方が間違いなく簡単に問題なく実装できます。正しいデータベース インデックスを使用し、リクエストごとのオーバーヘッドをできるだけ低く保つようにしてください (たとえば、完全なフレームワークを開始せず、(my-)sql クエリを 1 つだけ実行します)。
すでに述べたものに加えて、サーバー送信イベントの代わりにチャンク転送を使用することもできます。さまざまなブラウザーで動作させるにはいくつかの作業が必要ですが、低遅延通信にも適しています。それ以外には、サーバーとクライアントの間に常に開いている接続があるため、ポート制限に関して websocket ソリューションと同じ欠点があります。
もう 1 つの可能性は、既製のチャット アプリケーションまたはチャット サービスを使用することです。既製のソリューションがたくさんあります。中には、パフォーマンスや機能を向上させるために独自の Web サーバーを採用しているものもあります。既製のソリューションについては、Node.JS とSocket.IO (サーバー側の JavaScript) を参照してください。サービスとしてのチャットについては、状況によって異なります。たとえば、Livechat はクライアント <-> サポート トーク用のチャット サービスを提供します。
サーバーでのスリープ/クエリループについて考えながら、より多くの人がソリューション 2 を提案する前に:
ソリューション 2 を実装する正しい方法は、スレッド間/プロセス間通信 (IPC) を使用することです。これにより、待ち時間が短縮され、リソースが節約されます。これらの例は、セマフォ、ミューテックス、または条件変数 (sem_* および pthread_* 関数) です。そうしないと、解決策 1 と同じ遅延とリソースの浪費が発生し、クロスブラウザーの問題が追加され、それをきれいに実装するための作業が増えることになります。また、その場合は、ある種の SQL ベースのデータベースとスクリプト言語の使用をやめて、よりパフォーマンスの高い言語 (C、C++、Java) に移行する必要があります。最近では、サーバー側の JavaScript でさえ、これらのタスクで php よりも優れています。ソケットを参照してください。上記のIOリンク)