Startschwierigkeiten mit FastCgi

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

Hallo,

ich habe das mit dem FastCGI noch nicht ganz gerafft.

Ich habe meine Apache - httpd.conf wie von Fred beschrieben angepasst.

Code: Alles auswählen

ProxyPass /testfcgi/ fcgi://localhost:5600/
ist hinzugefügt worden und

Code: Alles auswählen

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
sind auskommentiert worden.

Der Apache wurde neu gestartet. Den Beispielcode in der PB-Hilfe unter WaitFastCGIRequest() habe ich geladen und was nun?

Wo kompiliere ich den hin? (Ich denke, nach htdocs\testfcgi\, oder?)
Unter welchem Namen?
Muss ich den FastCgi-Server dann selber starten oder macht das der Apache von sich aus?

Danke im voraus & Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Startschwierigkeiten mit FastCgi

Beitrag von Bisonte »

War es nicht so, das FastCGI die gleichen Ordner nutzt wie CGI (bei XAMPP auf Windows) ?
Desweiteren musste man *.SHTML Seiten schreiben, nicht *.html damit Apache das erkennt....
Ist vielleicht ein Ansatz ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

Bisonte hat geschrieben:Ist vielleicht ein Ansatz ?
mh, nicht wirklich.

Bei CGI mache ich folgendes:

Code: Alles auswählen

If Not InitCGI() Or Not ReadCGI()
 End
EndIf

WriteCGIHeader(#PB_CGI_HeaderContentType, "text/html", #PB_CGI_LastHeader) ; Write the headers to inform the browser of the content format

WriteCGIString("<html><title>PureBasic - variables</title><body>" +
               "Hello from PureBasic CGI !" +
               "</body></html>")
dann kompilieren nach /xampp/cgi-bin/cgitest.exe und Aufruf von http://localhost/cgi-bin/cgitest.exe -> klappt.

Aber FastCGI fungiert als Server. Welche Adresse muss ich denn da angeben? Dieser ProxyPass sollte ja dafür sorgen, dass ich bei http://localhost/testfcgi/ auf fcgi://localhost:5600/ weitergeleitet werde. Aber dafür müsste doch der FastCGI-Server bereits laufen, oder?

Grüße ... Peter
a²+b²=mc²
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Startschwierigkeiten mit FastCgi

Beitrag von Andreas21 »

Schon versucht im Browser einmal die exe zu starten? Dann müsste der Server Lauffen.

Also als erstes:

Code: Alles auswählen

http://localhost/cgi-bin/fastcgitest.exe
und danach als zweites:

Code: Alles auswählen

http://localhost/testfcgi/
aufruffen?
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

:? Sehr seltsam. Jetzt funktioniert es.

Bisher habe ich den Server gestartet und bekam beim Aufruf von http://localhost/testfcgi/ immer eine "Zugriff nicht möglich!"- Meldung. Anscheinend ist jetzt irgendein Knoten geplatzt (oder ich habe aus versehen mal alles richtig gemacht). Nun bekomme ich die gewünschte Ausgabe.

Also nochmal zusammengefasst (für Apache-User):

Der httpd.conf die Zeile

Code: Alles auswählen

ProxyPass /testfcgi/ fcgi://localhost:5600/
hinzufügen und

Code: Alles auswählen

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
auskommentieren. Apache (neu) starten

Die ProxyPass-Zeile sorgt dafür, dass bei Zugriff auf http://localhost/testfcgi auf fcgi://localhost:5600/ umgeleitet wird. Der Ordner testfcgi muss dabei nicht physikalisch vorhanden sein.

Dann in PB das Beispiel laden (und starten), das in der PB-Hilfe unter WriteCGIString() zu finden ist.

Dann im Browser http://localhost/testfcgi aufrufen. Fertig. Einfacher als gedacht :D

Danke @Bisonte und @Andreas21 für den seelischen Beistand!

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

und schon kommt die nächste Seltsamkeit, die ich mir nicht erklären kann:

FastCGI heißt ja nun mal so, weil der Aufruf gegenüber des normalen CGI schneller sein soll.

Da die meisten CGI in einer Scriptsprache (Perl, Python, PHP, ...) lässt sich das nachvollziehen, weil zum Ausführen des Codes ja auch immer der Interpreter mit geladen werden muss.

CGI in PB müssen nicht interpretiert werden, weil sie schon in kompilierter Version vorliegen. Somit fällt dieser Geschwindigkeitsnachteil durch das direkte Ausführen weg.

Nun habe ich mir einen kleinen Code gebastelt, der mir die Geschwindigkeitsunterschiede zwischen beiden Techniken zeigen soll (sowohl CGI als auch FastCGI ):

Code: Alles auswählen

EnableExplicit

InitNetwork()

Define Counter, z1, z2, z3
Define *Buffer
Define Url.s

; Url = "http://localhost/cgi-bin/cgitest.exe"
Url = "http://localhost/testfcgi/"

For Counter = 1 To 20
	z1=ElapsedMilliseconds()
	*Buffer = ReceiveHTTPMemory(Url)
	z2=ElapsedMilliseconds()
	If *Buffer
		z3 + z2-z1
		FreeMemory(*Buffer)
	EndIf
Next

MessageRequester("!", Str(z3/20))
Das Ergebnis erschüttert mich ein wenig: Während der Zugriff auf CGI im Schnitt so um die 16 bis 18 Millisekunden dauert, lässt sich FastCGI fast eine Sekunde Zeit. :shock:

Dass man die Zugriffszeit auf das CGI nicht dramatisch verbessern kann, habe ich mir schon fast gedacht, aber dass FastCGI so eklatant langsamer sein soll, stimmt mich skeptisch. Habt Ihr 'ne Idee, was da so lange dauert? Vielleicht die Umleitung durch den ProxyPass?

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Startschwierigkeiten mit FastCgi

Beitrag von NicTheQuick »

Der Unterschied zu FastCGI ist, dass der Prozess durchgängig läuft und immer wieder neue Anfragen annimmt und abarbeitet. Bei CGI wurde bei jedem Aufruf der Prozess neu gestartet. Das heißt den Unterschied erkennst du am besten, wenn du mehrere Aufrufe deines Programms simulierst. Dazu muss es natürlich auch entsprechend programmiert worden sein. Vielleicht dauert das Vorbereiten eines FastCGI-Prozesses etwas länger, weil Netzwerk-Sockets erstellt werden müssen. Bei CGI reicht ja die Standard-Ein- und Ausgabe.

Am ProxyPass liegt es jedenfalls nicht, keine Sorge.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

NicTheQuick hat geschrieben:Vielleicht dauert das Vorbereiten eines FastCGI-Prozesses etwas länger, weil Netzwerk-Sockets erstellt werden müssen. Bei CGI reicht ja die Standard-Ein- und Ausgabe.
der FastCGI läuft doch permanent. Zum Zeitpunkt der Aufrufe befindet sich FastCGI in der While-Wend - Schleife, in der nur noch Read-/WriteCGI() ausgeführt werden:

Code: Alles auswählen

If Not InitCGI()
  End
EndIf

If Not InitFastCGI(5600) ; Create the FastCGI program on port 5600
  End
EndIf

While WaitFastCGIRequest()
  If ReadCGI()
    WriteCGIHeader(#PB_CGI_HeaderContentType, "text/html", #PB_CGI_LastHeader)
    WriteCGIString("<html><title>PureBasic - test</title><body>" +
                   "Hello from PureBasic CGI<br>" +
                   "Actual time: <b>"+FormatDate("%hh:%ii", Date()) + "</b>" +
                   "</body></html>")
  EndIf
Wend
Und im Gegensatz zum normalen CGI müsste ja auch zumindest die jeweilige Ladezeit der exe wegfallen (OK, evtl. können die durch geschicktes caching durch das OS gegen 0 tendieren).

Wie gesagt: Eigentlich bin ich der Meinung, dass FastCGI-Aufrufe ein paar Millisekündchen schneller oder mindestens genauso schnell sein sollten. Aber doch nicht 50 bis 100 mal langsamer.

Grüße ... Peter
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Startschwierigkeiten mit FastCgi

Beitrag von NicTheQuick »

Sorry, ich hab mit dem neuen FCGI noch nichts gemacht. Hab noch nicht mal die neue Beta heruntergeladen, weil ich keine Zeit dafür finde.
Aber sehe ich das richtig, dass man immer noch nicht neue Threads erstellen kann pro FastCGI-Request? Eigentlich macht FastCGI nur Sinn, wenn pro Request ein neuer Thread erstellt wird, der sich um die Antwort kümmert. Alles in einer Schleife machen, ist doch wieder nur halbherzig gedacht. :doh:
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Startschwierigkeiten mit FastCgi

Beitrag von TroaX »

EDIT3:
Ich habe fastCGI jetzt mal mit mod_fcgid getestet. Das weiteste, bis wo hin ich gekommen bin war ein Fehler 500 mit der Information:
Fehlermeldung:
End of script output before headers: fcgi_test.exe
Egal also, wie ich das ganze drehe und wende. Es scheint tatsächlich nur mit diesem komischen Proxy-Kram da zu laufen. Ich denke mal da ist die Bremse drin. Denn normalerweise kann eigentlich die Kommunikation zwischen Apache und FastCGI-Anwendung nicht so ekelhaft lange dauern. Das ganze ist so dermaßen unpraktikabel. Auch mein Firefox zeigt eine Sekunde für den gesamten Request an (1015 ms). Das ist ein No-Go!
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Antworten