2016-03-22 11 views
0

環境:Debian、lighttpd、fam。仮想プライベートサーバのカーネルDnotifyが有効かどうかは不明です。FAMまたはlighttpdへのファイル作成の強制通知

私のCGIがファイルシステムでファイルを作成した後、ブラウザに実行中のJavaスクリプトであるクライアントに短いメッセージを返し、クライアントにファイルのダウンロード準備が整ったことを通知します。ここには1つの問題があります - クライアントがhttp:// 404のlighttpdからのエラーを得るのは、特にこれらのソフトウェアがすべてlocalhostで実行されている場合です。私は、この問題は、ファイル作成のfamによってlighttpdの待ち時間が通知されたことに起因すると考えています。私はすべての出来事が次の順序で起こると想像します:

  1. CGIはファイルを作成します。
  2. CGIはクライアントに応答します。
  3. クライアントはlighttpdからファイルを取得します。
  4. lighttpdは、そのキャッシュ内のファイルを見つけられません。

ファイルがリモートホストで作成され、NFS経由でlighttpdに通知されると、そのような問題は悪化すると思います。

私の質問は、クライアントに応答する前にlighttpdにファイルの作成を伝えるためにCGIをコードする方法ですか?

つまり、上記の手順の間に通知手順を「挿入」するには1.2.?私がlighttpdでこれを行うことはできませんが、nginxでそれを行うことができれば、私は後者への切り替えも検討できます。同様に、私はfamから他のファイル交代モニターに切り替えることもできます。

よろしく、

答えて

1

lighttpdのは、ファイルの非存在をキャッシュしていないので、問題はあなたのCGIスクリプトで可能性が高いです。 CGIスクリプトは、ファイルを作成する必要があります。カーネルは、CGIプロセスのstdioでバッファリングされる可能性があるため、カーネルが内容をディスクにフラッシュする必要があることを知るようにします。それ以降は、スクリプトがクライアントにメッセージを送信する必要があります。

CGIがファイルの2番目の要求を受け取ったサーバーとは別のサーバーで実行され、ファイルがNFSまたは他のリモートファイルシステムに格納されている場合は、追加の手順が必要です。最も簡単な解決策は、通常のNFSキャッシュ設定が約5秒であるため、クライアントに2〜2秒待ってからファイルのダウンロードを再試行することです。

関連する問題