1

何らかの理由で、以下の質問に対する答えが見つかりませんでした。おそらく、あまりにも明白すぎるためです。

perl ダンサーを使った実験中に、10 秒間スリープしてから何かを返すルートを追加しました。これは、長時間実行される操作をシミュレートするために行いました。この 10 秒間、ダンサーは他のリクエストに応えないことに気付きました。これは、ダンサーがシングルスレッドであるためだと理解しています。

現在、このシングルスレッドのアプローチは、要求がやや厳しいアプリケーションにも適していないことは明らかです。ですから、確立された解決策はたくさんあるに違いないと思います。しかし、私はグーグルで検索する正しい検索文字列を知らないようです.

明確にするために:長時間実行される操作自体を開始したリクエストがブロックされてもかまいません。私が望むのは、他のすべてのリクエストが処理されていることです。

誰でも私に教えてもらえますか

  • ウェブサーバーは、他のリクエストをブロックすることなく、従来、長時間実行される操作をどのように処理していましたか?
  • 操作に時間がかかることがわかっている状況で、セッションごとにスレッド/プロセスが存在するか、またはスレッド/プロセスをオンデマンドで生成できるか
  • マルチスレッドに移行するとき、つまりブラウザが常に同じプロセスと通信するとは限らない場合、セッション情報はどのように保存されますか?
  • ダンサーに関する特定の推奨事項(ダンサーの代替案を自由に推奨してください)
4

1 に答える 1

2
  • これは、Web サーバーと基盤となるオペレーティング システムによって異なります。Apache httpd に関する SO here に関する回答があります: What is Apache process model?

  • 「すぐに使える」Dancer はシングルスレッドの HTTP::Server::Simple を使用しますが、これが唯一のオプションではないことに注意してください。https://metacpan.org/module/Dancer::Deploymentを参照してくださいWeb サーバーに同時実行性を提供する Apache CGI から始まるさまざまな Dancer 展開オプション用。*nix 環境で作業している場合、デタッチされたプロセスを生成するのは簡単ですが、Win32 では可能ですが、http 応答以外のメカニズム (STOMP や websockets など) で結果をクライアントに送信する必要がある場合があります。 . もう 1 つの方法は、Dancer ルートから別の長時間実行プロセスを生成し、すぐにそのルートのクライアントにルックアップ キーを返し、そのプロセスを完了するために別のルートでクライアントにポーリングさせることです。おそらく、これに対する答えは、Dancer の前に同時要求を処理できる Web サーバーが必要だということでしょう。

  • ブラウザーはセッション情報を Cookie に保存し、Dancer は対応するセッション情報をサーバーに保存し、Dancer はこれらを照合します。これは、心配しないでくださいということを除いて、3番目の質問には答えません。

  • Dancer が同時実行性/長時間実行プロセスの問題を除いて、すべてのニーズをサポートしている場合は、Web サーバーの展開オプションを読んでいるように思えます: https://metacpan.org/module/Dancer::Deploymentが問題を解決する可能性があります。以前と同様に、* nix 環境を使用している場合は、Perl ベースの同時 Web サーバーに関してより多くのオプションがありますが、Windows でも問題を解決できると確信しています。IIS + FastCGI を使用して、これの概念実証を完了しました。

于 2013-04-21T00:13:07.833 に答える