Estoy usando Delphi 2006 e Indy 10. Creo un formulario y agrego un componente IdHttpServer. Hago un evento OnCreate del formulario para establecer el servidor activo, y entro en estas líneas para OnCommandGet del servidor:Delphi/Indy IdHttpServer no multiproceso?
procedure TForm3.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
Beep;
Sleep(10000);
AResponseInfo.ContentText := DateTimeToStr(Now);
end;
Nota del sueño durante 10 segundos.
Luego pruebo con Firefox, usando 2 navegadores. Tengo el primero conectado a "localhost", y escucho un pitido enseguida. Luego, selecciono el segundo navegador y lo conecto a localhost (en menos de 10 segundos), pero no emite un pitido de inmediato. Espera a que se complete la primera solicitud, luego emite un pitido y espera otros 10 segundos.
Pensé que estos componentes eran de subprocesos múltiples? ¿Hay alguna propiedad que pueda configurar para que se comporte de la manera que pensé que sería (ambas solicitudes serían respondidas de inmediato).
Puede comprobar si todo se está ejecutando en el mismo subproceso al devolver Formato ('% d% d', [MainThreadID, GetCurrentThreadID]) para el valor ContentText. Si es realmente multiproceso, los dos valores que obtenga en cada solicitud serán diferentes entre sí, y los segundos valores de ambas respuestas probablemente también sean diferentes. –
Si pudiera interesarle una alternativa: comencé http://xxm.sourceforge.net/ para abrir un proyecto en el que estaba trabajando que podría resolver este y otros problemas similares. Todavía no lo probé en Delphi 2006, está basado en Delphi 7, pero con un poco de suerte debería funcionar. –