[DOCKER] CGI in C und Dart: Einführung (1)

CGI in C und Dart

Wenn Sie heutzutage eine dynamische Homepage erstellen, "Starten Sie eine Linux-Instanz mit VPS", "Verteilen Sie Inhalte mithilfe eines serverlosen Frameworks", "Legen Sie sie mit K8S usw. in Container ab". Ich denke, der jüngste Trend geht zu "wahr".

Bis vor kurzem war es jedoch üblich, einen Mietserver zu mieten und CGI zu verwenden, um dynamische Inhalte bereitzustellen. Ich werde über dieses CGI erklären.

Verwenden Sie CGI aus den Sprachen C und Dart

Apropos CGI, Perl und PHP werden häufig verwendet, Hier werden C-Sprache und Dart-Sprache angesprochen.

Es gab keine Geschichte, die ich für CGI in der Dart-Sprache verwendet habe, weder DuckDuckGo noch Google.

Der Grund, warum es keine gab, war natürlich die klassische Technologie. Wahrscheinlich, weil es in Zukunft nie benutzt wurde

CGI ist einfach und leicht

Ist es um 2004-2006? PHP wurde weit verbreitet und viele Dienste wurden mit CGI gemacht. Viele sind keine Ingenieure. Auch solche Nicht-Ingenieure Es wurden Dienste geschaffen, die das ganze Bild erfassen und Geld verdienen konnten.

Im Vergleich zu Serverless wie React Vue Flutter und Firebase Lambda heutzutage Ich denke, das lag daran, dass es leicht zu lernen war.

Was ist CGI?

CGI steht für Common Gateway Interface. https://en.wikipedia.org/wiki/Common_Gateway_Interface https://tools.ietf.org/html/rfc3875

Es bestimmt, wie interagiert werden soll, insbesondere zwischen dem Server und einem externen Programm. Im Gegensatz zum aktuellen Interface ist es super einfach.

Starten Sie die App vom Server und erhalten Sie das Ausführungsergebnis

In CGI wird die Anwendung durch Angabe der Parameter vom Server gestartet. Ruft die Standardausgabe der App als Rückgabewert ab.

Lassen Sie uns einen konkreten Blick darauf werfen.

App, die Hallo, Welt !! anzeigt.

hello.c


// hello.c
// gcc hello.c -o hello.cgi
#include<stdio.h>

int main(int argc, char* argv[]) {
    printf("Content-type: text/html\n\n");
    printf("Hello,World!!\n");
    return 0;
}

Angenommen, Sie haben eine App namens hello.cgi. Diese App, wenn Sie den Befehl . / Hello.cgi eingeben, """ Content-type: text/html

Hello,World!! """ Und es ist eine Anwendung, die nur die Zeichenfolge auf der Konsole anzeigt.

Die Seite zeigt Hallo, Welt !!

Wenn Sie in Ihrem Browser "http://example.com/hello.cgi" aufrufen, "Hallo Welt !!" wird im Browser angezeigt.

Rufen Sie auf diese Weise die App vom Server aus auf CGI kann die Ausgabe der App an den Benutzer zurückgeben

Bewegen wir es tatsächlich

Wir haben eine Docker-Umgebung vorbereitet. Detaillierte Einstellungen finden Sie in der Docker-Datei.

Container starten

$ git clone https://github.com/kyorohiro/dartlang_cgi.git
$ cd ./dartlang_cgi/001
$ docker-compose build
$ docker-compose up -d

Starten Sie VS Code

Öffnen Sie VSCode im Docker Container in Ihrem Browser http://127.0.0.1:8443

Starten Sie den Apache-Server in vscode

$ apache2

Erstellen Sie CGI

$ cd /app/www/cgi
$ gcc hello.c -o hello.cgi
$ dart2native hello_dart.dart -o hello_daet.cgi

Funktionsprüfung

Wenn Sie http://127.0.0.1:8080/ öffnen, wird ./app/www/index.html angezeigt.

Wenn Sie http://127.0.0.1:8080/cgi-bin/hello.cgi öffnen. Das Ausführungsergebnis von ./app/cgi/hello.cgi wird zurückgegeben

Durch Öffnen von http://127.0.0.1:8080/cgi-bin/hello_dart.cgi wird das Ausführungsergebnis von ./app/cgi/hello_dart.cgi zurückgegeben

Ergänzung

Dart kann mit dart2native zu Native kompiliert werden. Ich benutze es diesmal.

main(List<String> args) {
  print("Content-type: text/html\n\n");
  print("Hello,World From Dart!!\n");
  return 0;
}

Code

https://github.com/kyorohiro/dartlang_cgi

nächstes Mal

GET, POST, Cookie, Beschäftigen wir uns mit DB.

Recommended Posts

CGI in C und Dart: Einführung (1)
Die Richtung von Java in "C ++ Design and Evolution"
Von Java nach C und von C nach Java in Android Studio
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
Organisieren Sie Builds in C ++ / Java- und Win / Linux-Kombinationen
Lösen mit Ruby, Perl und Java AtCoder ABC 113 C Referenz
Ruby C Erweiterung und flüchtig
Reproduzieren Sie die Java-Enumeration in C #
C # und Java überschreiben Story
AtCoder ARC 081 C-Hash, der in Ruby, Perl und Java gelöst werden muss