Startschwierigkeiten mit FastCgi

Anfängerfragen zum Programmieren mit PureBasic.
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 »

Sooo ich habe eben mal einen Test mit NGINX gemacht und die FastCGI-Geschichte hat noch echt penetrante Bugs. Aber erst einmal zur Beruhigung. Das Delay von einer Sekunde gibt es bei NGINX nicht. Wenn der Request durchgeht, zeigt mir die Netzwerkanalyse zwischen 1 und 4 ms an. Das nenne ich mal einen Unterschied. Blöd nur, das über NGINX leider nur genau jeder zweite Request durchgeht. Bei den anderen Request bekommt der Browser keine Antwort von NGINX. Im Accesslog von NGINX steht der Statuscode 499, weil man die Requests abbrechen muss. Die laden nämlich ewig. Das ganze FastCGI-Gedöhns ist aktuell also nicht brauchbar. Es bleibt also abzuwarten, ob bis zur Releaseversion das ganze vernünftig läuft.

BIG UPDATE: Das Rätsel vom störrischen Apache und dem zickigen NGINX ist tatsächlich gelöst. Nach dem umstellen des Error.logs bei Apache auf Debug flüssterte er mir, das er den Zielcomputer net erreicht. Ich habe es dann mal mit der IP unter ProxyPass statt localhost getestet. Und weder der Apache noch NGINX zicken jetzt rum. In beiden Fällen bei allen Request laut FF-Netzwerkanalyse 0-1 ms. Damit kann man also dann doch arbeiten. :)
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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

TroaX hat geschrieben:Damit kann man also dann doch arbeiten. :)
finde ich auch. :D

Meine Ergebnisse:

CGI: ~ 14ms
FastCGI: ~ 2ms

Gute Arbeit, Sherlock! :allright:

Danke & Grüße ... Peter
a²+b²=mc²
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 »

Das mit den POST und GET-Daten muss ich jetzt nur noch herausfummeln. Das sollte aber kein Thema sein. Bleibt aber noch die Frage nach dem Multithreading. Und tatsächlich ist auch das kein Problem. Man kann mehrere Threads erstellen und alle können die gleiche Art von Schleife abarbeiten. Und dadurch, das die Prozeduren ja private sind, sollte es auch da keine Probleme mit dem ganzen geben. Einzig für z.B. globale Datenbankverbindung müsste man etwas tricksen, da man die durchaus auch global definieren kann. Aber vom einfachen Grundsatz her kann man es so machen:

Code: Alles auswählen

OpenConsole()

Procedure WriteCGIConstant(Constant$)
  WriteCGIString(Constant$ + ": " + CGIVariable(Constant$)+"<br>")
EndProcedure

If Not InitCGI()
  End
EndIf
  
If Not InitFastCGI(5600) ; Create the FastCGI program on port 5600
  End
EndIf
  
  
  
Procedure goon()
  While WaitFastCGIRequest()
    PrintN("Incomming Request!")
    If ReadCGI()
      WriteCGIHeader(#PB_CGI_HeaderContentType, "text/html", #PB_CGI_LastHeader) ; Write the headers to inform the browser of the content format
      WriteCGIString("<html><title>PureBasic CGI</title><body>")  
      WriteCGIConstant(#PB_CGI_AuthType)
      WriteCGIConstant(#PB_CGI_ContentLength)
      WriteCGIConstant(#PB_CGI_HeaderContentType)
      WriteCGIConstant(#PB_CGI_DocumentRoot)
      WriteCGIConstant(#PB_CGI_GatewayInterface)
      WriteCGIConstant(#PB_CGI_PathInfo)
      WriteCGIConstant(#PB_CGI_PathTranslated)
      WriteCGIConstant(#PB_CGI_QueryString)
      WriteCGIConstant(#PB_CGI_RemoteAddr)
      WriteCGIConstant(#PB_CGI_RemoteHost)
      WriteCGIConstant(#PB_CGI_RemoteIdent)
      WriteCGIConstant(#PB_CGI_RemotePort)
      WriteCGIConstant(#PB_CGI_RemoteUser)
      WriteCGIConstant(#PB_CGI_RequestURI)
      WriteCGIConstant(#PB_CGI_RequestMethod)
      WriteCGIConstant(#PB_CGI_ScriptName)
      WriteCGIConstant(#PB_CGI_ScriptFilename)
      WriteCGIConstant(#PB_CGI_ServerAdmin)
      WriteCGIConstant(#PB_CGI_ServerName)
      WriteCGIConstant(#PB_CGI_ServerPort)
      WriteCGIConstant(#PB_CGI_ServerProtocol)
      WriteCGIConstant(#PB_CGI_ServerSignature)
      WriteCGIConstant(#PB_CGI_ServerSoftware)
      WriteCGIConstant(#PB_CGI_HttpAccept)
      WriteCGIConstant(#PB_CGI_HttpAcceptEncoding)
      WriteCGIConstant(#PB_CGI_HttpAcceptLanguage)
      WriteCGIConstant(#PB_CGI_HttpCookie)
      WriteCGIConstant(#PB_CGI_HttpForwarded)
      WriteCGIConstant(#PB_CGI_HttpHost)
      WriteCGIConstant(#PB_CGI_HttpPragma)
      WriteCGIConstant(#PB_CGI_HttpReferer)
      WriteCGIConstant(#PB_CGI_HttpUserAgent)
      
      WriteCGIString("</body></html>")
    EndIf
    FinishFastCGIRequest()
    PrintN("Request Finished!")
  Wend     
EndProcedure

th1 = CreateThread(@goon(),0)
th2 = CreateThread(@goon(),0)
th3 = CreateThread(@goon(),0)
th4 = CreateThread(@goon(),0)

WaitThread(th4)
Eine weitere Möglichkeit wäre es auch, das ganze einfach den Webserver machen zu lassen. Und zwar durch den Loadbalancer. Man kann den Server ja mit unterschiedlichen Netzwerkports laufen lassen und die dem Webserver als target für das Loadbalancing angeben. Der Webserver verteilt dann die Request auf die einzelnen Instanzen.
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
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Startschwierigkeiten mit FastCgi

Beitrag von HeX0R »

Vergiss nie einer Thread-Prozedur noch den obligatorischen Parameter mitzugeben.
Sonst verknisknaddelst Du Dir über kurz oder lang den Stack und es kracht.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

Noch ein Verständnisproblem:

Kann man einen laufenden FastCGI-Server auch direkt ansprechen? Oder bedarf es immer eines Webservers über den dann die Anfrage an FastCGI weitergeleitet wird?

Danke & Grüße ... Peter
a²+b²=mc²
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 »

Wenn die anfragende Anwendung das fastCGI Protokoll implementiert hat, geht das. PureBasic hingegen hat allerdings keine Libs für einen FastCGI Client, soweit ich das gesehen habe.
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
Benutzeravatar
dige
Beiträge: 1239
Registriert: 08.09.2004 08:53

Re: Startschwierigkeiten mit FastCgi

Beitrag von dige »

Hat schon jemand fastCGI mit einem Microsoft IIS Server zum laufen bekommen?
Hab zumindest schon herausgefunden, dass man als erstes die Programm Parameter
auswerten muss, über die man den Port mitgeteilt bekommt.

Leider passiert dann bei WaitFastCGIRequest() nix... Ist das nicht IIS kompatibel?
"Papa, ich laufe schneller - dann ist es nicht so weit."
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 »

Hmmm gute Frage. Ich persönlich ziehe auf Windows Nginx vor. Gibt es Fehler in den Logs?
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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Startschwierigkeiten mit FastCgi

Beitrag von Kiffi »

TroaX hat geschrieben:Wenn die anfragende Anwendung das fastCGI Protokoll implementiert hat, geht das. PureBasic hingegen hat allerdings keine Libs für einen FastCGI Client, soweit ich das gesehen habe.
Danke für die Info! Dachte schon, ich hätte da was übersehen.
dige hat geschrieben:Hat schon jemand fastCGI mit einem Microsoft IIS Server zum laufen bekommen?
nee, da stehe ich wie'n Ochs vorm Berg.

Grüße ... Peter
a²+b²=mc²
Antworten