私はDelphi 2006とIndy 10を使用しています。私はフォームを作成し、IdHttpServerコンポーネントをドロップダウンします。私は、アクティブなサーバを設定するためのフォームのOnCreateのイベントを作り、そして私は、サーバーのOnCommandGetためにこれらの行を入力します。Delphi/Indy IdHttpServerはマルチスレッドではありませんか?
procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Beep;
Sleep(10000);
AResponseInfo.ContentText := DateTimeToStr(Now);
end;
10秒間スリープします。
次に、2つのブラウザを使用してFirefoxでテストします。私は最初のものが "localhost"に接続して、すぐにビープ音が鳴ります。私はその後、2番目のブラウザにタブし、localhost(10秒未満)に接続するが、すぐにビープ音は出ない。最初の要求が完了するのを待ってからビープ音を鳴らし、さらに10秒待ちます。
これらのコンポーネントはマルチスレッドであると考えましたか?私はそれが思うように動作するように設定することができるいくつかのプロパティがあります(両方の要求がすぐに応答される)。
ContentText値のFormat( '%d%d'、[MainThreadID、GetCurrentThreadID])を返すことで、すべてが同じスレッドで実行されているかどうかを確認できます。実際にマルチスレッド化されている場合は、各リクエストで得られる2つの値が互いに異なり、両方の応答の第2の値もおそらく異なるでしょう。 –
私は代替案に興味があれば、私はhttp://xxm.sourceforge.net/をオープンソースにしています。これは、私がこれを取り組んでいるプロジェクトで、これと同様の問題を解決することができます。私はまだDelphi 2006でそれを試していない、それはDelphi 7に基づいていますが、少し運があればうまくいくはずです。 –