[Lazarus] fpWeb long process progress
Leonardo M. Ramé
l.rame at griensu.com
Tue Aug 14 16:27:08 CEST 2012
On 2012-08-14 09:47:41 +0200, Michael Schnell wrote:
> AFAIK, a web application uses the plain old standard mechanism, a
> web server uses to work with a CGI application. it start the
> application and when same ends, the web server retrieves its output
> and sends it to the browser. So the web application just does not
> live long to be able to wait for anything.
>
> To create a longer living web enabled process it takes a lot more effort.
>
> You can try several approaches:
>
> - purely propriety: Use a second process (a long living daemon) and
> have the web application communicate with same (e.g. via TCP/IP or
> Pipe)
> - fast CGI: here the (Apache) Web Server does exactly this
> communication on it's own account
> - ISAPI: here a (Microsoft) Web server communicates with a DLL
>
> My colleagues do a combination of (1) and (3) with one of their
> (Delphi) project very successfully:
>
> They created a very simple ISAPI DLL (using RemObjects to do the
> ISAPI communication)
>
> They created a Windows service and used RemObjects (using the
> "Windows Message" transport) to have the ISAPI DLL communicate with
> the service.
>
> (RemObjects is a commercial product that is specified to work as
> well with Delphi as with FreePascal.)
>
> -Michael
Thanks Michael, I'm testing a different approach, based on a temporary
file. It works this way:
1) The client asks for a TaskId, for example 1234.
2) With the TaskId generated by the server, the client calls a CGI
method called runLongTask(myTaskId). This method writes a temporary file
which name is the taskId.
3) The client can ask for status by using a method called
getTaskStatus(myTaskId).
This way I can run a long task without having to create a daemon.
Regards,
--
Leonardo M. Ramé
http://leonardorame.blogspot.com
More information about the Lazarus
mailing list