[DOCKER] CGI en C et Dart: Introduction (1)

CGI en C et Dart

De nos jours, lors de la création d'une page d'accueil dynamique, "Lancer une instance Linux avec VPS", "Distribuer du contenu à l'aide d'un framework sans serveur", "Déposez-le dans un conteneur à l'aide de K8S, etc." Je pense que la tendance récente est au "vrai".

Cependant, jusqu'à récemment, il était courant de louer un serveur de location et d'utiliser CGI pour fournir du contenu dynamique. Je vais vous expliquer ce CGI.

Utiliser CGI à partir des langages C et Dart

Aussi, en parlant de CGI, Perl et PHP sont souvent utilisés, Ici, le langage C et le langage Dart sont ciblés.

Il n'y avait pas d'histoire que j'ai utilisée pour CGI dans le langage Dart, que ce soit DuckDuckGo ou Google.

Bien sûr, la raison pour laquelle il n'y en avait pas était la technologie classique, Probablement parce qu'il n'a jamais été utilisé à l'avenir

CGI est simple et facile

Vers 2004-2006, PHP s'est généralisé et de nombreux services ont été créés avec CGI. Beaucoup ne sont pas des ingénieurs. Même ces non-ingénieurs Des services capables de saisir une vue d'ensemble et de gagner de l'argent ont été créés.

Comparé à Serverless comme React Vue Flutter et Firebase Lambda ces jours-ci Je pense que c'était parce que c'était facile à apprendre.

Qu'est-ce que CGI

CGI signifie Common Gateway Interface. https://en.wikipedia.org/wiki/Common_Gateway_Interface https://tools.ietf.org/html/rfc3875

Il détermine comment interagir, notamment entre le serveur et un programme externe. C'est super simple contrairement à l'interface actuelle.

Lancez l'application depuis le serveur et obtenez le résultat de l'exécution

Dans CGI, l'application est lancée en spécifiant les paramètres du serveur. Obtenez la sortie de sortie standard de l'application comme valeur de retour.

Jetons un regard concret.

App qui affiche Hello, World !!

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;
}

Supposons que vous ayez une application nommée hello.cgi. Cette application, lorsque vous entrez la commande . / Hello.cgi, """ Content-type: text/html

Hello,World!! """ Et c'est une application qui affiche uniquement la chaîne de caractères sur la console.

La page affichera Hello, World !!

Si vous appelez "http://example.com/hello.cgi" depuis votre navigateur, "Hello, World !!" s'affiche dans le navigateur.

De cette façon, appelez l'application depuis le serveur CGI peut renvoyer la sortie de l'application à l'utilisateur

Déplaçons-le réellement

Nous avons préparé un environnement Docker. Veuillez vous référer au fichier Docker pour les paramètres détaillés !!

Démarrer le conteneur

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

Lancer VS Code

Ouvrez VSCode dans le conteneur Docker dans votre navigateur http://127.0.0.1:8443

Lancez le serveur Apache dans vscode

$ apache2

Construire CGI

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

Contrôle de fonctionnement

Lorsque vous ouvrez http://127.0.0.1:8080/, ./app/www/index.html s'affiche.

Lorsque vous ouvrez http://127.0.0.1:8080/cgi-bin/hello.cgi. Le résultat de l'exécution ./app/cgi/hello.cgi est renvoyé

L'ouverture de http://127.0.0.1:8080/cgi-bin/hello_dart.cgi renverra le résultat de l'exécution de ./app/cgi/hello_dart.cgi

Supplément

Dart peut être compilé en natif à l'aide de dart2native. Je l'utilise cette fois.

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

la prochaine fois

GET, POST, Cookie, Traitons avec DB.

Recommended Posts

CGI en C et Dart: Introduction (1)
La direction de Java dans "C ++ Design and Evolution"
De Java à C et de C à Java dans Android Studio
Différences dans l'écriture des classes Java, C # et Javascript
Organiser les builds dans des combinaisons C ++ / Java et Win / Linux
Résolution avec Ruby, Perl et Java AtCoder ABC 113 C Reference
Extension Ruby C et volatile
Reproduire l'énumération Java en C #
Histoire de remplacement C # et Java
AtCoder ARC 081 C hash à résoudre en Ruby, Perl et Java