Używam Delphi 2006 i Indy 10. Tworzę formularz i rozwijam komponent IdHttpServer. I zrobić OnCreate imprezę dla formularza, aby ustawić serwer aktywny, i wprowadzić te wiersze dla OnCommandGet serwera:Delphi/Indy IdHttpServer nie wielowątkowy?
procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Beep;
Sleep(10000);
AResponseInfo.ContentText := DateTimeToStr(Now);
end;
Uwaga snu przez 10 sekund.
Następnie testuję w przeglądarce Firefox, używając 2 przeglądarek. Pierwszy łączy się z "localhost" i od razu słyszę sygnał dźwiękowy. Następnie przechodzę do drugiej przeglądarki i łączę się z localhost (w mniej niż 10 sekund), ale nie od razu. Czeka na zakończenie pierwszego żądania, a następnie sygnał dźwiękowy i czeka kolejne 10 sekund.
Myślałem, że te komponenty były wielowątkowe? Czy jest jakaś własność, którą mogę ustawić tak, aby zachowywała się tak jak myślałam (oba żądania zostaną natychmiast odebrane).
Można sprawdzić, czy wszystko działa w tym samym wątku, zwracając format ("% d% d", [MainThreadID, GetCurrentThreadID]) dla wartości ContentText. Jeśli jest to naprawdę wielowątkowe, dwie wartości, które otrzymasz w każdym żądaniu, będą się różnić od siebie, a drugie wartości obu odpowiedzi będą prawdopodobnie również różne. –
Gdybym mógł cię zainteresować alternatywą: zacząłem http://xxm.sourceforge.net/, aby otworzyć projekt, nad którym pracowałem, który mógłby rozwiązać ten i podobne problemy. Nie próbowałem tego na Delphi 2006, ale jest oparty na Delphi 7, ale przy odrobinie szczęścia powinien działać. –