Interfejs webowy do aplikacji

0

Mój program napisałem w Typhon (klon Lazarus-a) i działa pod Linux arm.
Chciałbym dodać taki mały "wodotrysk" jak interfejs webowy, aby przez przeglądarkę można było w pewnym stopniu sterować aplikacja
albo chociaż wyświetlić zmienne , lub log.

Jak to zrobić aby się nie narobić , proszę o sugestię

bo przeglądając komponenty znalazłem 3 rozne serwery HTTP
INDY, LNET, SYNAPSE

IdHTTPServer1: TIdHTTPServer; INDY 
LHTTPServerComponent1: TLHTTPServerComponent; LNET
vsHTTPServer1: TvsHTTPServer;  SYNAPSE  

Który będzie najlżejszy ? I najprzyjemniejszy we współpracy

0

Od siebie mogę polecic Synapse. O lekkości można jednak mówić tylko pisząc pod Windows w czystym WinAPI. Tam można wspomóc się modułem Simple TCP, do pobrania z www.piechnat.pl - jednak znając życie nie obeszło by się bez dostosowania kodu pod kątem Lazarusa. Oczywiście użyjesz czego Ci wygodniej, ale pewien ex user pormujący tutaj kiedyś Lazarusa, a zarzucający mi niesłusznie promowanie Delphi 7, polecał zawsze Synapse, a wieć może coś w tym jednak jest. Poza tym Indy chyba ogarnia najlepiej tutaj @kAzek :-)

0

Znalazłem taki przykład:

http://opensoft.homeip.net/articles/webserver1.pdf

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  fphttpapp, fpwebfile, fphttpserver;

type

  { TForm1 }

  { THTTPServerThread }

  THTTPServerThread = Class(TThread)
  Private
    FServer : TFPHTTPServer;
  Public
    Constructor Create(APort : Word;
    Const OnRequest : THTTPServerRequestHandler);
    Procedure Execute; override;
    Procedure DoTerminate; override;
    Property Server : TFPHTTPServer Read FServer;
  end;

  TForm1 = class(TForm)
    btnStart: TButton;
    btnStop: TButton;
    Mlog: TMemo;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure DoHandleRequest(Sender: TObject;      Var ARequest: TFPHTTPConnectionRequest;       Var AResponse : TFPHTTPConnectionResponse);
    procedure ShowURL;
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  FHandler: TFPCustomFileModule;
  FServer:THTTPServerThread;
  FURL: string;
implementation

{$R *.lfm}

{ THTTPServerThread }

constructor THTTPServerThread.Create(APort: Word;
  const OnRequest: THTTPServerRequestHandler);
begin
  FServer:=TFPHTTPServer.Create(Nil);
  FServer.Port:=APort;
  FServer.OnRequest:=OnRequest;
  Inherited Create(False);
end;

procedure THTTPServerThread.Execute;
begin
  try
    FServer.Active:=True;
  Finally
    FreeAndNil(FServer);
  end;
end;

procedure THTTPServerThread.DoTerminate;
begin
  inherited DoTerminate;
  FServer.Active:=False;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  {RegisterFileLocation('files','public_html');
  MimeTypesFile:='/etc/mime.types';
  FHandler:=TFPCustomFileModule.CreateNew(Self);
  FHandler.BaseURL:='files/';    }
end;

procedure TForm1.DoHandleRequest(Sender: TObject;   var ARequest: TFPHTTPConnectionRequest;   var AResponse: TFPHTTPConnectionResponse);
var
  s: TStringStream;
begin
  FURL:=Arequest.URL;
  FServer.Synchronize(@ShowURL);
  //FHandler.HandleRequest(ARequest,AResponse);
  s:= TStringStream.Create('<h1>aaaaaaaaaaaaa</h1>');
  AResponse.ContentStream:= s;

  caption := inttostr(AResponse.ContentStream.Size);
end;

procedure TForm1.ShowURL;
begin
  MLog.Lines.Add('Handling request : '+FURL);
end;

procedure TForm1.btnStartClick(Sender: TObject);
begin
  MLog.Lines.Add('Starting server');
  FServer:=THTTPServerThread.Create(8090,@DoHandleRequest);
end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
  MLog.Lines.Add('Stopping server');
  FServer.Terminate;
end;

end.
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1