Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C++ web lib] Tsux

Créer son site web en C++ (avec FastCGI)

    19 juillet 2014 à 22:25:06

    Ohayoh,

    Je suis Imagic (un pseudonyme qui n'a aucun rapport avec une certaine gamme de produit) et je viens vous présenter mon projet de bibliothèque C++,  "Tsux".  Je programme dans plusieurs langages depuis maintenant quelques années et me suis rapidement voué d'affection pour le C++ et le JavaScript. J'aime les choses simples, parfois trop simples même.

    En savoir plus sur le projet

    GitHub du projet : https://github.com/ImagicTheCat/Tsux (pour les impatients)

    Génèse

    C'est en développant des sites web que m'est venu l'idée de cette bibliothèque, ma curiosité ma poussée à regarder l'envers du décors, c'est à dire ce qu'il y a derrière php et comment fonctionne fondamentalement le système de requête <-> réponse. En voyant toute la diversité des techniques de développement du web aujourd'hui, je voulais réaliser un site web robuste, rapide et très épuré afin de renouer avec le "bas niveau" et la simplicité.

    C'est dans cette idée qu'est née Tsux.

    Généralités et avancements

    Tsux est donc une bibliothèque C++ basée sur la bibliothèque FastCGI (fcgi et fcgi++) qui permet de créer des applications web. Il s'agit d'application car la principale particularité de FastCGI est de pouvoir lancer un processus "permanent" qui répond aux différentes requêtes qui lui sont soumises, le processus n'est donc pas rechargé pour chaque connexion. Ce qu'apporte Tsux à FastCGI, c'est un ensemble d'outils qui se veulent le plus simple possible afin de créer une application très rapidement.

    Par exemple, un système de route (comme certains framework php) avec expression régulière, la gestion des variables post ou get, mais aussi la gestion de l'upload des fichiers. Tsux se veut complète, mais dans la simplicité, elle n'a pas vocation à devenir un framework C++ qui impose sa façon de faire.  L'utilisation peut en être très libre, même si un ensemble d'outils permettent de faciliter le développement.

    La bibliothèque vient juste de naître, mais elle permet déjà de réaliser des sites web intéressants.

    Objectifs

    La bibliothèque peut énormément évoluer mais ne deviendra pas compliquée. Du moins, elle essaiera de rester la plus simple possible. Parmi les évolutions à venir, j'ai quelques idées qui ne devraient pas tarder à voir le jour :

    • Identification des utilisateurs, similaire aux sessions de PHP (fait)
    • Une classe de gestion de traduction (fait)
    • Multithreading (mais cela peut s'avérer compliqué à mettre en place)

    En dehors des fonctionnalités, développer un site avec Tsux nécessite d'avoir une façon de faire propre car aucune organisation n'est imposée pour envoyer les réponses. A l'avenir, des idées d'organisation du code source pourraient naître. Mais cela changerait drastiquement le code, c'est donc une évolution qui ne sera pas prise à la légère et qui demanderait beaucoup de réflexion.

    Je réaliserais également un exemple de site web avec Tsux très prochainement.

    Le projet et son originalité

    Je n'ai pas trouvé énormément de bibliothèques de ce genre, c'est d'ailleurs une des raisons qui m'a poussée à la réaliser. Je ne voulais pas d'un framework de serveur web, car il est bien plus pratique de laisser des serveurs génériques gérer les applications et les sites (tel que nginx ou apache). Tsux permet de se concentrer sur l'essentiel et d'avoir de bonnes performances (qui s'expliquent principalement par le fait qu'il s'agisse d'une application compilée).

    Au passage, la bibliothèque en elle même est sous la licence MIT afin de pouvoir l'utiliser sans restriction (voir tout de même la licence de FastCGI qui n'est pas explicitement "intégralement" libre).

    Voilà, si vous voulez en savoir plus n'hésitez pas à consulter le github du projet (https://github.com/ImagicTheCat/Tsux) où je me suis empressé de réaliser de petits tutoriels (en anglais) pour la prendre en main. Et si vous avez des questions, vous pouvez me les poser ici, j'essaierais d'y répondre au maximum.

    -
    Edité par Imagic 6 août 2014 à 23:20:13

    • Partager sur Facebook
    • Partager sur Twitter
    Créer son site web en C++ avec Tsux
      26 juillet 2014 à 0:14:26

      Yoh !

      Des nouvelles du projet :

      Nouvelles fonctionnalités

      • Ajout d'une classe Translator pour gérer le contenu en fonction de la langue
      • Possibilité de linker des fonctions à des identifiants dans les templates
      • Support des traductions dans les templates
      • Ajout d'un système de session
      • Ajout de "route rewriting" (pouvoir reécrire de manière interne les routes, pratique pour créer un espace admin, une page de maintenance ou encore pour suffixer les pages par la locale utilisateur /fr /en etc)

      Pour l'instant les performances sont plutôt intéressantes, je reviendrais bientôt avec un exemple de site web plus ou moins simple.

      -
      Edité par Imagic 26 juillet 2014 à 0:18:29

      • Partager sur Facebook
      • Partager sur Twitter
      Créer son site web en C++ avec Tsux
        26 juillet 2014 à 1:19:37

        bonjour , très bon projet, et très intéressant , j'ai déjà programmé en c++ et je connais le niveau de difficulté que t'as eu en développant cette bibliothèque donc félicitation :)

        Bon , j'aimerais bien avoir des infos au niveau des performance ,  et aussi es que ta bibliothèque  nous permet d'utiliser l'architecture MVC

        Bonne continuation ;)

        • Partager sur Facebook
        • Partager sur Twitter
        On nous apprend à compter les secondes, les minutes, les heures, les jours, les années... mais personne ne nous explique la valeur d'un instant.
          26 juillet 2014 à 1:35:34

          Salut et merci.

          Pour le modèle MVC c'est à voir, le système de module, de route et de template permet de faire quelque chose de similaire, mais Tsux n'a pas vocation à imposer une manière de coder particulière ou de créer une architecture pour les fichiers. Ceci dit je vais y réfléchir en développant quelques sites avec, ça me permettra d'avoir des cas de figure plus complexe.

          Au niveau des performances je pense qu'un site d'exemple pourra mieux les mettre en évidence. Après tout dépend, vu que c'est en C++ tu peux t'amuser à garder en mémoire vive tout un tas de truc et optimiser au maximum ton site.

          • Partager sur Facebook
          • Partager sur Twitter
          Créer son site web en C++ avec Tsux
            26 juillet 2014 à 20:03:24

            Yoh',

            Voici une adresse temporaire d'un début de démo réalisé avec Tsux  : http://tsux.dep.fr.nf/

            Le code source associé https://github.com/ImagicTheCat/Tsux/tree/master/example

            Je rajouterais différents exemples au fur et à mesure.

            -
            Edité par Imagic 26 juillet 2014 à 20:35:14

            • Partager sur Facebook
            • Partager sur Twitter
            Créer son site web en C++ avec Tsux
              28 juillet 2014 à 15:01:48

              Salut,

              Super projet ca fait plaisir de voir des gens rajouter un niveau d'abstraction pour les libs fcgi !

              Je suis le projet sur github avec attention, bon courage a toi ;)

              • Partager sur Facebook
              • Partager sur Twitter
                2 août 2014 à 11:10:28

                Salut,

                Merci pour les encouragements. Je pense qu'à terme ça sera plus qu'un niveau d'abstraction, en fait c'est déjà un ensemble d'outil pour la réalisation de site en C++ (notamment par la présence du Translator).

                • Partager sur Facebook
                • Partager sur Twitter
                Créer son site web en C++ avec Tsux
                  6 août 2014 à 23:05:19

                  Yoh' !

                  Quelques news :

                  Ajouts de fonctionnalités

                  • Pouvoir customiser les pages d'erreurs (404, 403, etc...) d'une manière similaire aux routes
                  • Ajout d'une classe Config pour charger des fichiers de configuration simples à la manière du Translator
                  • Pouvoir lier un template à un identifiant dans les templates
                  • Héritage de template, pour hériter de tous les identifiants d'un autre template (ainsi que de ses traductions)

                  Résolution de bugs

                  • Exécution infinie de super routes 

                  J'aimerais réaliser une démo utilisant une base de donnée MySQL, mais je n'ai pas trop d'idées. Si vous en avez, n'hésitez pas à m'en faire part.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Créer son site web en C++ avec Tsux
                    5 septembre 2014 à 16:44:32

                    Ohayoh, des news !

                    Ajouts de fonctionnalités

                    • Ajout d'une fonction similaire à htmlentities de php (doc)
                    • Ajout d'une fonction "slugify" pour créer des slug (pas parfaite) (doc)
                    • Ajout d'une classe Paginator (pour générer des paginations customisées facilement) (doc)
                    • Ajout d'une classe MySQL basée sur la bibliothèque mysql-cpp-conn afin de faciliter l'utilisation de mysql (ça ne rentre pas totalement dans la philosophie de Tsux, car je devrais normalement faire la même chose pour tout les SGBD et ce n'est même pas forcément nécessaire, mais MySQL reste le plus utilisé et mysql-cpp-conn n'était pas pratique)

                    La classe MySQL n'est pas encore documentée sur le github, j'hésite encore à la laisser dans la bibliothèque.

                    -
                    Edité par Imagic 5 septembre 2014 à 16:50:13

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Créer son site web en C++ avec Tsux

                    [C++ web lib] Tsux

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown