Utilizzo Delphi 2006 e Indy 10. Creo un modulo e rilascio un componente IdHttpServer. Faccio un evento OnCreate per il modulo per impostare il server attivo, ed entro in queste righe per OnCommandGet del server:Delphi/Indy IdHttpServer non multithreading?
procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Beep;
Sleep(10000);
AResponseInfo.ContentText := DateTimeToStr(Now);
end;
Annotare il sonno per 10 secondi.
Quindi eseguo il test con Firefox, utilizzando 2 browser. Ho il primo collegamento a "localhost" e sento subito un segnale acustico. Passo quindi al secondo browser e lo faccio collegarlo a localhost (in meno di 10 secondi), ma non emette un segnale acustico subito. Aspetta che la prima richiesta venga completata, quindi emette un segnale acustico e attende altri 10 secondi.
Ho pensato che questi componenti fossero multi-threaded? C'è qualche proprietà che posso impostare per far sì che si comporti come pensavo (entrambe le richieste otterrebbero una risposta immediata).
È possibile controllare se tutto è in esecuzione sullo stesso thread restituendo Formato ('% d% d', [MainThreadID, GetCurrentThreadID]) per il valore ContentText. Se è realmente multithread, i due valori che ottieni in ciascuna richiesta saranno diversi tra loro e probabilmente anche i secondi valori di entrambe le risposte saranno diversi. –
Se potessi interessarti in un'alternativa: ho avviato http://xxm.sourceforge.net/ per aprire un progetto su cui stavo lavorando che potrebbe risolvere questo e altri problemi simili. Non l'ho ancora provato su Delphi 2006, è basato su Delphi 7, ma con un po 'di fortuna dovrebbe funzionare. –