0

初めてロングポーリングを試しています。

PHP スクリプトには、スクリプトを 10 秒間フリーズするスリープ タイマーを使用した while ループがあり、その後、データベース内の新しいものを再度探します。

私はパフォーマンスとサーバー/データベースの負荷/接続を考えています:

サーバーにとって悪いのは、多くの GET リクエスト (ajax) か、DB 接続の多くの開閉か?

長いポーリングを使用して、while ループの各ラウンドで DB 接続を閉じてから再度開く方がよいでしょうか (限られた数の接続を解放するため)。

4

1 に答える 1

0

これは、思ったほど些細なことではありません。単純な「すべきかどうか」という代替案から始まるものは、より多くのサーバーにスケーリングするにつれて急速に複雑さを増します。

両方のアプローチで壁にぶち当たった結果、安価な共有ホスティングでもうまく機能するように思われるプロキシ スキームを思いつきました。

  • DB をポーリングする単純なプロキシ スクリプトの単一のインスタンスを実行します (共有ホスティングでは、これを cron ジョブから開始します。これは、他に実行されていない場合にのみインスタンスを開始するため、再起動を簡単に乗り切ることができます)
  • そのプロキシ スクリプトで、高価な DB ポーリングを安価なポーリングに変換します。ファイル システムの SysV SHM とフラグファイルはどちらも正常に動作します。プロキシは、単一の DB 接続を開いたままにしておく必要があります
  • 潜在的に多くのロングポーラーにプロキシフラグをチェックさせます。

これにより、同時ポーリングが増加した場合でも、サーバー側の短いポーリング間隔を問題なく実装できるようになりました。

于 2013-06-01T10:59:02.413 に答える