0

私は現在、データベースで新しい変更をチェックする必要がある長いポーリングスクリプトに取り組んでいます。

whileループでクエリを実行するのにリソースを消費しすぎて、遅延なしでクエリを再実行するのか、それとも1秒のように少し遅延させる必要があるのか​​疑問に思います。

たとえばFacebookを見ると、1秒以内に新しい変更が加えられているように見えるので、データベースのチェック中に遅延が発生しないか、この遅延が0.5秒のように非常に短いと思います。

正解は期待していませんが、このためのベストプラクティスについてより多くのアドバイスがあります

ありがとう

4

1 に答える 1

1

ええ、whileループが可能な限り高速に実行される場合(そうなるでしょう)、データベース接続を圧倒する可能性のある高速レートが得られるだけでなく、ポーリングの「均一」レートも得られません。

次のようなものを試してください

$polllength = 1;
while(1) {
    $polltime = microtime(true);
    //poll function call;
    $endtime = microtime(true);
    $sleeptime = $polllength - ($endtime-$polltime);
    sleep($sleeptime);
}

このように、ポーリング機能がどのように変化しても、ポーリングは約$ polllength秒離れています(INTARNETSが原因です)

編集:また、whileループから抜け出す方法があることを確認してください。ただし、全員がそのことを知っている必要があります。

負荷分散の場合、完全にハードコーディングされないように、polllength値を何らかの方法で微調整できるようにする必要があります。それが構成ファイルにあるかどうかにかかわらず、それは負荷が増加するにつれて増加する値でさえあるかもしれません。それは、エンドユーザーにとって実際にどのように「感じる」か、そしてサーバーが実際にどのように進んでいるか次第です。経験則として、最大nスレッドはn *(ポーリング長/平均応答時間)ユーザーを意味します。その制限を超えて到達すると、ユーザーが圧倒されたサーバーからの応答を待つため、応答時間が長くなることは間違いありません。

于 2012-04-05T15:15:49.137 に答える