[Lazarus] fpWeb and server-sent events

Luca Olivetti luca at wetron.es
Thu Jun 4 14:44:28 CEST 2020


El 4/6/20 a les 12:04, Luca Olivetti via lazarus ha escrit:
> El 4/6/20 a les 11:48, Michael Van Canneyt ha escrit:
> 
>>> It turns out I can with some careful, or reckless ;-),  overriding.
>>>
>>> https://paste.ubuntu.com/p/CdHfc7BTHB/
>>
>> Haha, very nice job :-)
>>
>> I'll see if I can integrate this in the HTTPServer request/response.
>>
>> It won't work in fastCGI/CGI of course, but if we can make it 
>> available in a
>> http application, why not...
> 
> 
> I think that approach (take over the socket from the response) could be 
> useful in more cases, e.g. streaming content, websockets, etc.
> As you say it has to be a stand-alone/embedded server and probably it 
> only works when it's threaded (due to the connection being kept active 
> for an indeterminate time), but that's better than nothing.
> 
> Now, I have another problem: if the server cannot bind to the port it 
> throws an exception, but then I cannot try again, I have to destroy and 
> recreate the server, e.g. this doesn't work (the second call to 
> FServer.Run return immediately):
> 
> 
>    FServer:=TSseServerHandler.Create(nil);
>    FServer.Port:=8080;
>    FServer.Threaded:=true;
>    while not terminated do
>    try
>      FServer.Run;
>    except
>      on E:Exception do
>      begin
>        writeln(E.Message);
>        sleep(1000);
>        FServer.Terminate;
>      end;
>    end;
> 
> 
> this does (but I don't like it)
> 
>    while not terminated do
>    try
>      FServer:=TSseServerHandler.Create(nil);
>      FServer.Port:=8080;
>      FServer.Threaded:=true;
>      FServer.Run;
>    except
>      on E:Exception do
>      begin
>        writeln(E.Message);
>        sleep(1000);
>        FServer.Free;
>      end;
>    end;

Oh, and I had to do some more overriding so that the response could have 
a reference to the calling thread (needed if I want to use synchronize).

Bye

-- 
Luca Olivetti
Wetron Automation Technology http://www.wetron.es/
Tel. +34 93 5883004 (Ext.3010)  Fax +34 93 5883007


More information about the lazarus mailing list