1

シナリオと問題の説明:

  1. サーバーへのユーザー要求ファイル
  2. ファイルが大きいので生成に時間がかかる
  3. ファイルを作成していることを示すために、クライアント側でスピナーが実行されています。
  4. 数分後、サーバーがクエリに応答しないため、プロキシがタイムアウトします (理由ファイルが大きすぎて生成できません)。

私の理解 :

この状況を詳しく調べたところ、クライアントのプロキシがタイムアウトしており、それを制御できないことがわかりました。私にできる唯一のことは、クライアントがファイルを要求してダウンロードするロジックを変更することです。

私が考えた解決策:

解決策 1 :

  1. ユーザーリクエストファイル

  2. サーバーはサーバー側で一時ファイルを作成し、次のような http パスを作成します。

    http:\www.mydomain.com\temp\download\files\12342323.pdf

  3. リンクはより速くクライアントに配信されますが、一定期間非アクティブのままになります。

  4. リンクがアクティブ化されると、ユーザーはリンクをクリックします。

解決策 2:

私はこれについてあまり読んでいませんが、node.js経由でソケット接続を作成し、ファイルを転送することは可能ですか?

ノート:

解決策 1 では、過去 4 時間からコーヒーをまったく飲まずに頭のてっぺんにいます。私が知識のように立ち往生しているのは唯一のことです。ファイルがサーバー側で作成されたことをどのように検出し、ajax スクリプトでリンクを有効にしたりダウンロードしたりできるようになるのでしょうか。

この状況に対処するための新しいアイデアを投げてください。直接の回答は必要ありません。私はどちらかというと、釣りに使う道具を知ってから、既製品の魚を手に入れます。:) 乾杯。

参考までに: 現在使用するツールとして php と javascript があります。

4

3 に答える 3

3

ファイルが最終的に常に作成され、問題がクライアント側にある場合は、次のことができます。

  1. ユーザーがダウンロードをクリックすると、AJAX を介してファイルの生成を開始し、たとえばセッション変数に名前を保存します。
  2. クライアントでは、最も簡単な解決策は、サーバーを X 秒ごとにポーリングし、ファイルが存在するかどうか (php 経由で) を確認して、既に作成されているかどうかを確認することです。
  3. それができたら、javascript を使用してユーザーをファイルの場所にリダイレクトし、ダウンロードさせます。

次に、既にダウンロードされたファイルを削除するために、cron ジョブなどをセットアップできます。

于 2012-09-11T22:00:49.967 に答える
0

プッシュサーバー全体を必要としなかったため、タイムアウトリクエストでそれを行いました。それで、それがどのように機能するか。

リンクとチェッカー リンクを作成します。次に、チェッカーリンクにリクエストを送信し始めます。これにより、ファイルの状態が得られます。私には10秒で十分でした。サーバー側では、キューを作成し、それが完了するとフラグを書き込みます。ここで、チェッカー URL は成功の生成について述べ、クライアントにファイルへの URL リダイレクトを提供します。それでおしまい。

時間制限が短く、できるだけ早くファイルの準備ができていることをクライアントに伝えたい場合は、ソケット接続を作成できます。そして、リクエストをクライアントにプッシュするだけではありません。

于 2012-09-11T22:04:00.213 に答える
0

ファイルを生成する条件をキューに追加してから、ユーザーを別のページにリダイレクトします。次に、キューから読み取り、ファイルを生成するプロセスを毎分実行します。ファイルが作成されたら、リンクをユーザーに電子メールで送信します。

于 2012-09-11T22:00:06.503 に答える