PB Interpreter

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: PB Interpreter

Beitrag von AND51 »

Oben bei meiner Gegenfrage bin ich etwas vom Kurs abgekommen.
Ich wollte noch meine zukunftspläne schreiben. <)

Derzeit basiert der PB Interpreter auf CGI (Common Gateway Interface, Allgemeine Drittanbieter-Schnittstelle).
Das heißt JEDER Seitenaufruf endet in einer separaten Instanz des PB Interpreters und mit ihm auch jeweils eine Instanz des Kompilers und der Executable. Zwar versuche ich, den Kompiler immer auszulassen, indem ich seit v1.1 das Executable behalte, aber für stark besuchte Webseiten mag das noch immer nicht das Wahre sein.

FastCGI mag hier die Lösung sein: Hier ruft der Webserver den PHP/Perl/PB-Interpreter ein Mal auf und lässt ihn offen. Über diese Instanz werden dann die Skripte interpretiert. Somit muss der Interpreter nicht mehr jedes Mal ausgeführt werden, denn der läuft ja schon. Aber es geht noch eine Nummer härter:

Module sind bei Apache das Zauberwort. Durch sie lassen sich viele Funktionen, so auch Interpreter, wie DLL-Dateien im Webserver einbinden. Das dürfte also noch schneller als FastCGI sein. Aber bis hierhin ist es ein weiter Weg. FastCGI würde mir vorerst ausreichen.

Du siehst also: Ich habe noch einiges vor!
Deswegen würde ich mich freuen, wenn ich Zeit finde, den PB Interpreter weiterzuentwickeln. Und - wenn ich Leute finde, die wie du ihre Webseite in PB schreiben, damit sie mich mit Feedback unterstützen können. Bleib also am Ball, mein Freund! :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: PB Interpreter

Beitrag von Blackskyliner »

FastCGI und andere Sachen währen echt nicht schlecht!

Was ich allerdings auch nett finden würde, währe so etwas in der Richtung wie einen kleinen SocketServer der die Ausführung der Programme verwaltet, bzw. den Interpreter verwaltet...

Das würde dann so laufen, in meiner Phantasie (vergiss nicht es ist spöt ;)):

1. Der User fordert "runMe.pb" an
2. Der Server reagiert und startet 'getContent' (Eine Datei, manchmal auch mit .exe am Ende) mit dem Parameter 'runMe.pb'
3. getContent Piped das dann an den SocketServer der gibt das an den Interpreter weiter, der dann in einer Endlosschleife o.ä. auf input wartet, dann die Datei wenn nötig umsetzt und dann entsprechend das Programm als Nonblocking Program oder in einem eigenen Thread starten und dann die Daten über die Pipe an 'getContent' zurück geben und das tolle daran ist jetzt, dass der Browser nicht warten muss, bis das Programm nun wieder alle Ressourcen freigegeben hat und beendet ist, da das dann seperat geschieht und 'getContent' die Daten schon eher zurück geben kann.
4. Somit bekommt der Benutzer die Daten, sobald alles proccessed ist.
5. Daten werden freigegeben (vom 'runMe.pb' Programm)

Bei dem Prozess entfällt das initialisieren des gesamten Interpreters.
Außerdem entfallen (Zeit technisch) das freigeben aller Ressourcen.

Zudem ist man dann nicht auf die reine Benutzung im Webserver Bereich beschränkt, sondern könnte so vielleicht auch Aufgaben auf anderen Rechnern ausführen lassen und sich dann über eine NetworkPipe (sofern existent und in dem Zusammenhang sinnvoll? O_o) das Result, also die Ausgabe anzeigen zu lassen... Richtung Remote Code Execution, nur halt in dem Fall Remote Script Execution...

Kann auch sein das dieses Konzept völliger Unsinn ist, neben den bereits genannten besseren Methoden. Aber es währe mal ein Interessanter Ansatz.... Die Frage wäre, ob dieser schneller ist als der bereits verwendete... Bei dieser Methode könnte man dann allerdings IN den SocketServer wiederum eine Art caching Mechanismus einbauen, sodass z.B. statische, oder irgendwie als statisch Markierte? Dateien, bzw. Skripte nicht ausgeführt sondern direkt aus dem Cache gesaugt werden und so weiter und sofort... Je nachdem... Sehr verworren wiedermal heute... Aber vielleicht ist ja ein, als Interessanter zu markierender, Gedanke hier erwähnt wurde und somit die Antwort nicht ganz für'n Popo ist ;)

Da entschuldige ich mich auch schon mal im vornherein, falls alles totaler Unsinn ist ;)


MFG
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: PB Interpreter

Beitrag von AND51 »

Ich denke mal darüber nach. Momentan hab ich nur wenig Zeit, mich gewohnt ausführlich mit diesem Thread zu befassen. Wollt dich nur wissen lassen, dass meine Antwort hier etwas dauert.

Bis dahin die Frage:
Um zu erreichen, dass das Skript weiterlaufen kann, um noch Ressourcen freizugeben/aufzuräumen/sonstiges, könnte man das doch auch simpler realisieren: Das Skript gibt am Ende der Daten ein Codewort (z. B. END_DATA oder so) zurück, welches natürlich nicht mit an den Browser übertragen wird. Aber daran kann der Interpreter dann schon mal erkennen, dass das Skript fertig mit seiner Ausgabe ist.
Habe ich das so richtig verstanden?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: PB Interpreter

Beitrag von Blackskyliner »

Genau, richtig verstanden...
Jedoch unter anderem finde ich meine Idee gar nicht so schlecht, als dass man dann den Interpreter als lokalen Socketserver betrieben, auch für andere Anwendungsfelder die nicht unbedingt was mit HTTP zu tun haben müssen, nutzen kann.

z.B. stell ich mir folgendes Setup vor:

Server
Workstation

Die Workstation hat nun ein Programm geöffnet. Dieses soll was weiß ich jetzt... Berechnen. Dabei öffnet er übers Netwerk den Socket zum Interpreter, schiebt da sein Script rein, oder lässt eins aufrufen und wartet dann auf den proccessed Output des Scripts.

Also ne ganz einfache form vom "Verteilten Rechnen".
Ich weiß, es ist nicht dein Ziel soetwas zu erschaffen, denn immerhin gibts auch hier im Anwendungsforum div. Libarys mit denen das schöner zu machen ist. Es währe aber ein angenehmer Nebeneffekt der Implementierungsweise :)

Und man weiß ja nie, immerhin gibt es oft Programme und Ideen, die dann nachdem man sie der öffentlichkeit verfügbar gemacht hat, für Sachen verwendet werden können an die man bei der Entwicklung derer garnicht gedacht hätte. (Siehe Templateing bei C++ für Klassen und Funktionen, bzw. "allgemeinen Datentypen" ;))

Kannst ja nach reiflicher Überlegung, sobald du Zeit hast, dich drengt keiner, dir das nochmal durch denk Kopf gehen lassen und mir deine Vor oder Nachteile dieser Weise zu schildern, damit ich auch selber ein Urteil über meine Sache bilden kann, denn ich seh grad auch nicht was schlecht daran sein sollte (außer dem offensichtlichem Kommunikationsoverhead über sockets)

MFG
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Antworten