3

データベースクエリといくつかの後処理作業の結果であるレポートをユーザーに表示するサイト(django)があります。

これには 30 秒以上かかり、タイムアウトが発生しています (Heroku を使用しているため、タイムアウト数を変更できません)。

私が考えた唯一の可能な解決策は、長いポーリング アプローチを使用することでした。現在、次のように送信ボタンで ajax リクエストを発行します。

var options = {
          dataType: 'json',
          url: '/report/url/',
          error: custom_error,
          success: show_report,
        };

$('#report_form').submit(function() { 
        // submit the form 
            $(this).ajaxSubmit(options);
            // return false to prevent normal browser submit and page navigation 
            return false; 
        });

これは、データ量が増加するまで、開発マシンと本番環境で正常に機能していました。

ここで、この問題を解決するためにロング ポーリング アプローチを含めたいと思います。このリンクの指示に従いましたが、期待どおりに動作しません。

私のコードは次のようになります。

var options = {
      dataType: 'json',
      url: '/report/url/',
      error: custom_error,
      success: show_report,
      complete: poll
        };

$('#report_form').submit(function() { 
    $(this).ajaxSubmit(options);
    return false; 
        });
function poll(){
    $.ajax({ url: "/report/long-polling/", success: show_report, dataType: "json", complete: poll, timeout: 30000 });
};

接続を開いたままにするためだけに、意味のあるものを何も返さない URL (「/report/long-polling/」) を作成しました。

これは機能していません。1) フォームの送信後、新しい $.ajax は、30 秒のタイムアウトを考慮せずに、サーバーへのリクエストをトリガーします (上記のリンクから理解した限りでは、30 秒ごとに新しいリクエストをトリガーする必要があります。 )。2) これは実際の問題を解決していません 3) 私の開発サーバーでは、最初のコードでも機能しますが、レポート データを表示した後でも「/report/long-polling/」へのリクエストが停止しません。

どうすればこれを機能させることができますか?バックエンドでも変更する必要がありますか?

4

0 に答える 0