Écrire des applications C en utilisant Vely sous Linux


  • FrançaisFrançais


  • Vely est un outil d’écriture d’applications Web et de ligne de commande en C. Vely combine hautes performances et faible encombrement associés à la programmation C avec une facilité d’utilisation et une sécurité améliorée rappelant des langages comme PHP. C’est un logiciel gratuit et open source, et sous licence GPLv3 et LGPL 3 pour les bibliothèques, vous pouvez donc même créer des logiciels commerciaux avec.

    Vely fonctionne sur les principales distributions Linux et architectures de processeur. Vous pouvez utiliser des serveurs Web, tels qu’Apache, Nginx ou autres, et des bases de données telles que MariaDB, PostgreSQL et SQLite.

    Vous pouvez utiliser Vely pour les applications Web, les programmes de ligne de commande, comme middleware, les applications de base de données, les logiciels de services, l’intégration de données, l’IoT (Internet des objets) et partout ailleurs. Il est bien adapté au cloud, fonctionne facilement dans un conteneur et, en raison des faibles besoins en ressources, c’est également un bon choix lorsque la mémoire et la puissance de traitement sont limitées.

    Installer Vély

    Pour essayer Vely, installez le serveur Web Apache et Base de données MariaDB. Vous pouvez utiliser un serveur Web et une base de données différents, et la configuration serait similaire, mais dans cet exemple, j’utilise Apache et MariaDB.

    Ensuite, installez Vely. Sous Linux, utilisez un gestionnaire de packages tel que dnf ou alors apt.

    Projet de symboles boursiers

    Cet exemple enregistre les noms des symboles boursiers et leurs prix afin que vous puissiez les afficher dans une liste.

    Commencez par créer stock.v fichier et collez-y ce code :

    #include "vely.h"

    void stock() {
       out-header default
       @<html>
           @<body>
           input-param action
           input-param stock_name
           input-param stock_price
           if (!strcmp (action, "add")) {
              // Add to stock table, update if stock exists
              run-query#add_data@db = "insert into stock (stock_name,\
                  stock_price) values ('%s', '%s') on duplicate key \
                  update stock_price="%s"" : stock_name, stock_price, \
                  stock_price
               end-query
               error#add_data to define err
               if (strcmp (err, "0")) {
                   report-error "Cannot update stock price, error [%s]", err
               }
               @<div>
                  @Stock price updated!
               @</div>
           } else if (!strcmp (action, "show")) {
             // Show stock names and values
               @<table>
                   @<tr>
                       @<td>Stock name</td>
                       @<td>Stock price</td>
                   @</tr>
                   run-query#show_data@db = "select stock_name, \
                        stock_price from stock" output stock_name, \
                        stock_price
                       @<tr>
                           @<td>
                           query-result#show_data, stock_name
                           @</td>
                           @<td>
                           query-result#show_data, stock_price
                           @</td>
                       @</tr>
                   end-query
               @</table>
           } else {
               @<div>Unrecognized request!</div>
           }
           @</body>
       @</html>
    }

    Construire la base de données

    Pour cet exemple, créez une base de données nommée dbstockappartenant à l’utilisateur vely avec le mot de passe your_password. Ce sont des noms arbitraires, et dans la vraie vie, vous pouvez utiliser toutes les valeurs que vous voulez, tant qu’elles sont cohérentes dans tout votre code.

    Tout d’abord, connectez-vous à la base de données MariaDB en tant que root et exécutez ceci :

    CREATE DATABASE IF NOT EXISTS dbstock;
    FLUSH privileges;
    CREATE USER IF NOT EXISTS vely@localhost IDENTIFIED BY 'your_password';
    FLUSH privileges;
    GRANT ALL privileges ON dbstock.* TO vely@localhost;
    FLUSH privileges;
    exit;

    Connectez-vous à nouveau à MariaDB et définissez la base de données actuelle :

    $ mysql -u vely -pyour_password

    Vous pouvez maintenant créer les objets de base de données nécessaires à l’application. Tu as besoin d’un stock tableau dans le dbstock base de données pour cet exemple.

    USE dbstock;
    CREATE TABLE IF NOT EXISTS stock (stock_name VARCHAR(100) PRIMARY KEY, stock_price BIGINT);

    Enfin, créez un fichier de configuration de base de données nommé db afin que votre application puisse se connecter à la base de données. Tu dois l’appeler db parce que c’est ce que le code dans stock.v les usages. Par exemple:

    [...]
    run-query#add_data@db = "insert into stock ..."
    [...]

    Le nom de la base de données est précédé du @ signer, dans ce cas, @dbdonc le nom du fichier de configuration de la base de données est db. Comme pour les autres valeurs, vous pouvez nommer votre fichier de configuration de base de données comme vous le souhaitez, tant que votre code est cohérent.

    Voici la configuration pour le db dossier:

    [client]
    user=vely
    password=your_password
    database=dbstock

    Ce qui précède est un MariaDB standard fichier d’options client. Vely utilise la connectivité native de la base de données, vous pouvez donc spécifier toutes les options autorisées par une base de données donnée.

    Programmation et développement

    Construire l’application

    Ensuite, vous pouvez créer votre application Vely. Pour cet exemple, vous allez créer une application Web appelée stockapp:

    $ sudo vf -i -u $(whoami) stockapp

    Cela crée un home d’application sous le répertoire Vely (/var/lib/vv) et effectue les étapes de configuration de l’application requises pour vous.

    Pour construire votre application, utilisez le vv commande:

    $ vv -q --db=mariadb:db stockapp

    Voici ce que signifie chaque option :

    • -q construit une application
    • --db spécifie la base de données à utiliser (mariadb:dbcomme spécifié dans votre fichier de configuration)
    • stockapp est le nom de l’application

    Vous pouvez en fait utiliser n’importe quel nombre de bases de données et différents fournisseurs dans votre application. Cet exemple est cependant simple, vous n’avez donc besoin que d’une seule base de données. Vely a de nombreuses autres options utiles que vous pouvez utiliser, mais cela suffit pour le moment.

    Configurer l’accès Web

    Pour accéder à votre application via un navigateur Web ou divers clients Web, vous devez configurer un serveur Web. Il peut s’agir d’Apache, de Nginx ou de tout autre serveur prenant en charge le proxy FastCGI (la plupart, sinon la totalité, des serveurs Web et des équilibreurs de charge le font). Ici, je vais configurer Apache, mais la configuration est similaire pour les autres serveurs Web.

    Le proxy et proxy_fcgi Les modules sont installés et activés par défaut sur l’installation Fedora du serveur Web Apache, mais vous devez les activer sur les systèmes basés sur Debian (comme Ubuntu) :

    $ sudo a2enmod proxy
    $ sudo a2enmod proxy_fcgi
    $ sudo systemctl restart apache2

    Si vous n’êtes pas sur un système basé sur Debian, vous pouvez activer un module Apache en l’ajoutant au fichier de configuration Apache ou dans un fichier du /etc/httpd/conf.modules.d/ répertoire, selon la configuration de votre distribution.

    Ensuite, ouvrez votre fichier de configuration Apache dans un éditeur de texte. Par exemple, sur un système basé sur Debian :

    $ sudo vi /etc/apache2/apache2.conf

    Sur un système Fedora (y compris Red Hat Enterprise Linux et CentOS) :

    $ sudo vi /etc/httpd/conf/httpd.conf

    Ajoutez cette ligne à la fin du fichier :

    ProxyPass "/stockapp" unix:///var/lib/vv/stockapp/sock/sock|fcgi://localhost/stockapp

    Selon la configuration de votre serveur Web, il peut y avoir un meilleur endroit pour ajouter le ProxyPass directif. Pour cet exemple, cependant, ce qui précède est suffisant.

    Enregistrez le fichier et redémarrez le serveur Web. Sur les systèmes basés sur Fedora :

    $ sudo systemctl restart httpd

    Sur les systèmes basés sur Debian :

    $ sudo systemctl restart apache2

    Dans ce cas, vous vous connectez à votre application via un socket, mais vous pouvez utiliser un port TCP à la place (ce qui est pratique lorsque votre application réside dans un conteneur ou quelque chose de similaire).

    Exécutez l’application

    Démarrez le serveur d’applications pour votre application :

    $ vf stockapp

    Par défaut, cela exécute entre 0 et 20 processus serveur pour votre application, en fonction de la charge. Lorsque la charge utilisateur est faible, votre application n’utilise pratiquement aucune mémoire.

    C’était ça! Aller vers http://127.0.0.1/stockapp?req=stock&action=add&stock_name=XYZ&stock_pri… dans votre navigateur Web pour voir l’application.

    Vous venez de mettre à jour le cours de l’action pour le ticker “XYZ” à 440. Essayez différents tickers et prix pour créer une liste d’actions, que vous pouvez afficher avec l’URL http://127.0.0.1/stockapp?req=stock&action=show.

    Félicitations, vous avez créé votre première application Vely, reverse proxy derrière un serveur web.

    Vous pouvez également afficher la sortie sans navigateur graphique en utilisant curl :

    $ curl -s \
    "http://127.0.0.1/stockapp?req=stock&action=add&stock_name=XYZ&stock_price=440"
    $ curl -s "http://127.0.0.1/stockapp?req=stock&action=show"

    Exécutez l’application depuis le terminal

    Vous pouvez également exécuter votre application à partir du terminal. Une commande de terminal est toujours effectuée avec le serveur d’application FastCGI et porte le même nom que votre application (dans ce cas, stockapp). Cela fonctionne exactement de la même manière que l’application Web. Vous pouvez écrire certaines requêtes à votre application pour qu’elles soient traitées en tant que requêtes Web et d’autres à exécuter à partir de la ligne de commande. Pour ce faire, vous fournissez la demande en tant que variables d’environnement. Par exemple, pour afficher la liste des actions au format HTML, tapez :

    $ export REQUEST_METHOD=GET
    $ export QUERY_STRING="req=stock&action=show"
    $ /var/lib/vv/bld/stockapp/stockapp

    Pour supprimer les en-têtes HTTP, utilisez :

    $ export VV_SILENT_HEADER=yes
    $ /var/lib/vv/bld/stockapp/stockapp

    Comment fonctionne Vely

    Votre application fonctionne en traitant les demandes et en renvoyant les réponses. Une requête est l’une des deux méthodes HTTP : GET ou POST.

    Une requête a toujours un paramètre req. Dans l’exemple ici, sa valeur est stock. Cela signifie que le code source compilé à partir du fichier stock.v est appelée automatiquement pour traiter une telle demande.

    Un fichier source comme celui-ci peut faire beaucoup de choses différentes, toutes regroupées logiquement sous une seule requête. Ici, vous avez un autre paramètre actionqui peut avoir une valeur de add (pour ajouter ou mettre à jour un stock) ou show (pour afficher une liste d’actions). Vous spécifiez stock_name et stock_price paramètres lors de l’ajout ou de la mise à jour. Des trucs assez faciles. Autre que reqvous pouvez choisir les noms de paramètre comme bon vous semble.

    En regardant le code dans stock.v, c’est simple à suivre. Vous utilisez le paramètre d’entrée construct pour obtenir les valeurs de vos paramètres d’entrée. Oui, ces choses étranges dans le code C qui ne sont pas C sont Constructions du langage Velyet ils font beaucoup de choses utiles pour vous, comme requête d’exécution, qui (comme vous pouvez vous y attendre d’après son nom) exécute vos requêtes. Un facile est @qui est un construction de sortie. La gestion des chaînes est rendue simple et fiable sans se soucier des dépassements de mémoire tampon. Vérifiez référence complète des constructions Vely pour comprendre les capacités de Vely.

    Vely convertit toutes les constructions de votre code en C pur et crée un exécutable natif très petit et rapide. Votre application s’exécute en tant que plusieurs processus serveur FastCGI, qui restent résidents en mémoire tout en acceptant et en traitant les requêtes. Tous ces processus fonctionnent en parallèle.

    Pour plus d’informations, voir comment fonctionne Vely et en savoir plus sur Architecture de Vély.

    Gérer les chaînes et la mémoire

    Vely dispose d’un ramasse-miettes automatique pour toutes ses constructions. En fait, la plupart du temps, vous ne devriez pas du tout avoir besoin de libérer de la mémoire, donc le développement d’applications est encore plus simple. Laissez cela à Vely et profitez de l’informatique sans fuites de mémoire et avec beaucoup moins de problèmes de mémoire que vous ne le pensez. Constructions de chaînes telles que write-string faites en sorte qu’il soit sûr, rapide et facile de créer des chaînes complexes tout comme des chaînes simples.

    Responsable du programme FastCGI

    Même si vous ne souhaitez pas développer vos propres applications avec Vely, vous pouvez utiliser vf, Responsable du programme FastCGI de Velyavec n’importe quel programme FastCGI générique, pas seulement ceux créés avec Vely.

    Vous voulez en savoir plus sur Vély ?

    On me demande parfois le nom du projet. Vély est l’abréviation de Rapidité. Il est rapide à programmer, rapide à comprendre le code et à maintenir, et rapide (et petit !) au moment de l’exécution. Il est même facile à conteneuriser.

    Consultez la documentation sur vely.devqui propose des téléchargements et des exemples qui vont au-delà de l’introduction fournie dans cet article.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code