2017-02-22 1 views
0

現在、私は次の目的のために 'collaboration_control'コンポーネントを作成しています:LOADによるモニタリングコンポーネント

他のコンポーネントによってデータベースに書き込まれたニュースを表示します。つまり、別のコンポーネント(それ自体の環境で別のユーザーが共同作業で使用している場合でも)が、関連するエントリを 'update_information'テーブルに書き込む場合、コラボレーション制御コンポーネントはそれを読み込んで表示する必要があります。

私は空のDIVにLOADを介してコラボレーション・コントロール・コンポーネントをロードしています。コンポーネントは、DB内の新しい関連エントリを探しています。もちろん、このpingメカニズムは、相当なCPU負荷を発生させます。ソリューションとして、次回のルックアップのためにリロードする前に、コラボレーション・コントロール・コンポーネント内で例えばtime.sleep()を5秒間使用しました。この5睡眠秒の間に、そのページの他のすべてのコンポーネントがあまりにも:-(

を眠っている。しかしこのように、私の質問は: どのように私はweb2pyの非同期ルックアップ・コンポーネントを実装することができます

を事前に感謝!あなたがtime.sleep()を使用している場合は、5秒を取るために、それぞれの要求を強制的に、Ajaxリクエストがサーバー上で一時停止させているよう!

敬具 クレメンス

答えて

1

任意のサポートは、それが聞こえる。これは良いアイデアではありません、それはWebサーバーを占有するので全体の5秒間ead。さらに、デフォルトのファイルベースのセッションを使用している場合、Ajaxリクエストを数秒間オープンすると、各リクエストがセッションファイルにロックをかけるため、追加のAjaxリクエストが完了しなくなります。この問題を軽減するには、5秒間の休止前に明示的にセッションファイルのロックを解除することができますが、Ajaxリクエストの作成の間にブラウザが待機するようにする方がはるかに優れています。

実際、ヘルパーには、指定された間隔で自身をリロードする組み込みの機能があります。たとえば:

{{=LOAD(..., ajax=True, timeout=5000, times='infinity')}} 

は、上記の成分に5秒ごとにリロードされます(ただし、Ajaxリクエストは待機Javascriptを介して、ブラウザで実行されていると、すぐに戻ります)。

トラフィックのレベルに応じて、数秒ごとにAjax経由でポーリングすると、サーバーに負荷がかかりすぎる可能性があります。その場合、web2pyのwebsocket_messaging機能など、より効率的なプッシュベースの代替方法、またはNchanのようなものを検討することもできます。

+0

アンソニー、ありがとうございました!!! あなたはそれを知っています:いつもの答えは解決策です! よろしくお願いいたします。 Clemens – Clemens

+0

よろしくお願いいたします。最後に、サーバーの負荷が問題になる場合の代替アプローチを提案するメモを追加しました。 – Anthony

+0

さて、ありがとう!私はその結果のトラフィックに注目します。それが高すぎる場合は、プッシュメカニズムが本当に選択肢になります。私はあなたに情報を残すつもりだ... – Clemens