IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Intégration d'applications C++ au sein d'une page Web : quelle technologie utiliser ?


Sujet :

C++

  1. #1
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut Intégration d'applications C++ au sein d'une page Web : quelle technologie utiliser ?
    Bonjour à tous,

    Je désire créer un site Web pour présenter les résultats d'algorithmes C++ que je développe (problèmes d'optimisation de tournées, problèmes de coloration, problème du plus court chemin sur de grandes instances, etc). En fouillant sur le Net, j'ai découvert que la technologie CGI permettait d'exécuter une application C++ <i>via</i> un code HTML, l'application étant exécutée côté serveur.

    Cependant, avant de me lancer dans l'apprentissage de cette technologie, j'aimerais connaître son impact sur les performances de l'application C++. En effet, mes algorithmes requièrent toute la puissance du C++ (c'est pour cela que j'utilise ce langage) et j'ai cru comprendre, en m'informant au sujet de CGI, que son utilisation aboutissait à une forte sollicitation du système d'exploitation.

    Voici donc mes questions :

    • Pensez-vous que l'utilisation de CGI soit appropriée à la présentation d'algorithmes gourmands en performances au sein d'un site Web ?
    • Si oui, quel <i>framework</i> devrais-je utiliser ? Dans l'idéal, j'aimerais pouvoir utiliser des librairies compatibles avec Visual C++ ou Qt, et je ne suis pas du tout linuxien.
    • Connaissez-vous d'autres technologies plus performantes que CGI ?


    Merci à toutes et à tous pour vos réponses et vos éclaircissements ;-)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 301
    Points : 345
    Points
    345
    Par défaut
    Bonjour,

    Tu peux jeter un œil sur le cours en ligne suivant: "http://ad-wiki.informatik.uni-freiburg.de/teaching/EfficientRoutePlanningSS2012". C'est une université allemande mais le cours est en anglais très accessible. Le cours aborde progressivement les différentes techniques de calcul de plus court chemin (jusqu'aux dernières techniques utilisées par exemple par GoogleMaps). Il y a un TD sur la représentation dans une page web des tracés calculés côté serveur: la solution retenue est de passer par une requête jquery côté client et côté serveur c'est un petit serveur maison fait en C++ à l'aide de boost asio qui décode la requête du client et calcule le plus court chemin.
    Je me souviens plus si dans le cours ils utilisent plutôt l'api fournie par google mais perso j'avais utilisé leaflet et dans mon souvenir c'était pas trop compliqué.

    Pour tes questions sur CGI / fastCGI je pourrais pas t'aider, j'en ai jamais fait...

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Je pense aussi que l'approche décrite par Cédric est la bonne. Passer par CGI ou FastCGI voudrait dire que le code C++ traite la requête HTTP, mais concrètement ce n'est pas ce que tu veux.
    Find me on github

  4. #4
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Bonjour,

    Merci à tous les deux pour vos réponses. Le lien vers l'université de Freiburg est très intéressant. Je ne connaissais pas boost::asio et j'ai de très faibles compétences en programmation réseau. Je vais donc consulter le tutoriel traitant de ce sujet avant toute chose.

    Par contre, que voulez-vous dire par "le code C++ traite la requête HTML, ce n'est pas vraiment ce que tu veux" ? Au contraire, je pensais traiter des données utilisateur (par exemple, les coordonnées de points) à l'aide d'un formulaire HTML et donner ces informations en entrée de mon algorithme C++, dont les résultats seraient affiché par la page Web ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Le problème majeur, c'est que le C++ n'est pas très adapté (demande beaucoup de travail) pour interpréter les requêtes HTTP et générer des réponses HTTP.
    L'approche habituelle est d'utiliser des technologies Web (php, ASP.NET, Node.js, ...) pour faire ce travail et de dédié le travail C++ au calcul intensif en communicant avec une API en rien Web (Dll, composants, modules du serveur Web, ...).

  6. #6
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Citation Envoyé par bacelar Voir le message
    (...) et de dédié le travail C++ au calcul intensif en communicant avec une API en rien Web (Dll, composants, modules du serveur Web, ...).
    Bonjour Bacelar,

    Votre réponse m'intéresse aussi ! Pouvez-vous m'en dire plus sur la communication du C++ avec une de ces API ? De quoi s'agit-il au juste ? Avez-vous des exemples de telles API ?

    Merci beaucoup !

  7. #7
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 583
    Points : 1 615
    Points
    1 615
    Par défaut
    Je donne ma façon de procéder vu que personne ne l'a mentionnée encore:
    Je fais tourner mon appli c++ comme un service sur le serveur et je fais des connexions socket vers localhost en utilisant du javascript sur le site web. Ainsi j'ai tout le controle sur le processus c++ (genre: droits root, priorité ...)
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    pour de l'http, il y a aussi Curl et libcurl
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par leternel Voir le message
    pour de l'http, il y a aussi Curl et libcurl
    Ce sont des bibliothèques client, pas trop adapté dans ce cas je pense.

    Citation Envoyé par bacelar Voir le message
    Le problème majeur, c'est que le C++ n'est pas très adapté (demande beaucoup de travail) pour interpréter les requêtes HTTP et générer des réponses HTTP.
    L'approche habituelle est d'utiliser des technologies Web (php, ASP.NET, Node.js, ...) pour faire ce travail et de dédié le travail C++ au calcul intensif en communicant avec une API en rien Web (Dll, composants, modules du serveur Web, ...).
    En ce qui me concerne, j'ai l'habitude de choisir comme API d'écouter sur une socket et de décoder du json ou des messages protobuf. Comme, ça le code C++ ne dépend pas de la techno web choisie (que ce soit le serveur ou le langage), ce qui permet d'en changer si nécessaire sans toucher au C++. Si on tient à traiter l'HTTP en C++, on peut utiliser proxygen, écrit par facebook.
    Find me on github

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Les solutions proposées après ma dernière intervention sont valables mais je les trouve un peu trop "close to metal".
    Pourquoi ré-implémenter un server HTTP from scatch avec module d'identification ( avec fédération d'identité pour utiliser les identifiants twitter ou facebook ?), les droits d'accès, la monté en charge et tout le toutime alors que les serveurs HTTP de base font largement mieux ???

    L'espéranto informatique, c'est le C. Il est donc généralement facile d'attaquer des Dll ayant une interface C.

    Le protocole HTTP en request/response sans état (autre que les cookies) s'adapte plus à du C qu'à du C++.

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Les solutions proposées après ma dernière intervention sont valables mais je les trouve un peu trop "close to metal".
    Pourquoi ré-implémenter un server HTTP from scatch avec module d'identification ( avec fédération d'identité pour utiliser les identifiants twitter ou facebook ?), les droits d'accès, la monté en charge et tout le toutime alors que les serveurs HTTP de base font largement mieux ???
    Au contraire, les interventions sont plutôt d'accord avec ça. Je préfère l'écoute sur une socket qu'un branchement via une DLL, mais le but reste de ne pas traiter la partie HTTP et de laisser ça à un vrai serveur. Il n'y a qu'à interroger le service C++ avec du code Python/JS/PHP/autre, lui-même appelé depuis le serveur web. Si on n'aime pas les sockets, il y a ctypes en python qui permet de s'interfacer rapido avec une DLL en C.
    Find me on github

  12. #12
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Points : 224
    Points
    224
    Par défaut
    Bonjour à tous et merci à tous pour vos réponses. J'avoue que je ne comprends pas grand-chose à ce que vous dites et je ne pensais pas que ce serait aussi compliqué d'interroger une application C++ par un site Web.

    Je vais étudier vos solutions mais il me faudra d'abord acquérir des compétences pour les comprendre.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Cela peut vous sembler très complexe, mais dans les faits, c'est on ne peut plus simple, si on prend la peine de respecter quelques règles.

    Les faits, c'est de prendre un serveur Web, le configurer pour utiliser un framework pour du Web dynamique (php, Symfony, ASP.NET, ...), utiliser les primitives du framework pour accéder aux fonctions exportées en C par la dite Dll.

    Par exemple, en ASP.NET, la primitive, c'est juste un P/Invoque :

    Code ASP.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [DllImport("winmm.dll")]
    public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

    http://msdn.microsoft.com/fr-fr/library/bb469896.aspx

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2015, 13h33
  2. L'affichage d'une photo au sein d'une page jsp
    Par debutantjak dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 10/05/2006, 17h11
  3. [VB ou C++] intégration d'une page web dans une application
    Par devmat dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/10/2005, 15h14
  4. application qui connecte sur une page web
    Par spoolz dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2004, 09h47
  5. Réponses: 3
    Dernier message: 28/10/2003, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo