2010-05-25 20 views
0

J'ai besoin d'un moyen simple d'utiliser XMLHttpRequest pour permettre à un client Web d'accéder à des applications dans un périphérique intégré. Je suis confus en essayant de comprendre comment faire quelque chose de léger et léger qui gère le XMLHttpRequests venant sur le serveur Web et peut les traduire en appels d'application.Gestion de XMLHttpRequest pour appeler une application externe

La situation:

  • Le client Web utilisant Ajax (ExtJS spécifiquement) doit envoyer et recevoir de manière asynchrone à une application existante intégrée. Ce n'est pas seulement pour avoir un client léger/serveur mince, le client doit exécuter une vérification en arrière-plan sur l'état de l'application.
  • L'application peut exposer une interface de socket, avec un ensemble connu de commandes, d'événements et de valeurs de configuration. La configuration pourrait probablement être transmise en XML puisqu'elle provient d'une base de données SQLite.
  • Entre le client et l'application est un serveur web lighttpd exécutant quelque chose qui gère en quelque sorte la traduction. Ce quelque chose est le problème.

Ce que je pense que je veux:

  • Lighttpd peut utiliser FastCGI pour acheminer tous XMLHttpRequest à un processus externe. Ce processus comprendra HTML/XML et traduira entre celui-ci et la langue de l'application. Il aura une logique personnalisée pour simuler l'envoi de notifications au client (recevoir XMLHttpRequest, ne répondra pas jusqu'à ce que la prochaine notification soit disponible).
  • C/C++. Je voudrais vraiment éviter d'installer Java/PHP/Perl sur un périphérique intégré. Donc, j'ai besoin de plus de compréhension de bas niveau.

Comment faire?

  • Y at-il de bonnes bibliothèques C++ pour interpréter les en-têtes CGI et HTML afin que je ne dois pas faire tout traitement de syntaxe, je peux traiter le contenu demande/réponse?
  • Y a-t-il de bonnes références à ce qui se passe exactement, côté serveur, lors de la manipulation des interfaces XMLHttpRequest et CGI?
  • Y a-t-il un package qui exécute déjà la plupart de ce travail ou dois-je créer des composants non-HTTP/CGI à partir de zéro?

Répondre

0

Si je comprends bien, ma façon d'aborder ce problème serait un 3-tier (Ne pas se raccrocher tant les que nous avons tous les mots à la mode 3-tier qui entendu parler):

  1. JavaScript (ExtJs) sur les navigateurs parle HTTP, Ajax en utilisant XmlHttpRequest, raw (nu) ou wrapper n'a pas vraiment d'importance, au serveur web (Lighttpd, Apache, ...).
  2. Étant donné que l'application sur le périphérique intégré peut communiquer par socket, le serveur Web utilise le socket pour communiquer avec le périphérique intégré.
  3. Vous pouvez décider de mettre plus de logique métier sur le JavaScript, et garder le code Apache/Lighttpd vraiment mince afin qu'il ne dépasse pas le délai imparti.

De cette façon, vous pouvez tirer parti de toutes les technologies que vous connaissez déjà. Ajax entre les niveaux 1 et 2 n'est rien de nouveau, et utiliser socket entre 2 et 3.

+0

Je sais ce qu'est un socket, la question est de savoir comment traduire le HTTP qui arrive au serveur en informations utilisables et de générer la bonne réponse HTTP. Je n'ai pas trouvé de bonnes ressources sur la façon d'implémenter un processus dorsal en C/C++, au lieu d'installer un paquet comme PHP. – Ian

0

Je ne voulais pas dire que vous ne connaissiez pas socket. Je viens de proposer un moyen de prendre une descente d'un problème où j'entends beaucoup de mots: XML/HTML/Ajax/XmlHttpRequest/Java/PHP/Perl/C++/CGI et plus et offrent un moyen de simplifier en plus petit, mieux compris problème. Permettez-moi de clarifier:

Si vous souhaitez récupérer des données des périphériques intégrés et les afficher sur les navigateurs, demandez aux navigateurs de faire une demande au serveur Web, le serveur Web utilise le socket pour communiquer avec le périphérique intégré. Comment les données sont transmises entre le navigateur et le serveur, c'est du HTTP normal, pas plus, pas moins. Même chose entre le serveur Web et le périphérique intégré, sauf socket à la place de HTTP. Donc, si vous prenez un problème simple, comme faire un ajout de 2 chiffres. Sauf que ces 2 numéros d'entrée seraient transmis au serveur Web, puis le serveur Web passe à l'appareil intégré, où l'ajout est effectué. Le résultat est renvoyé au serveur Web, de nouveau au navigateur pour le rendu. Si vous pouvez faire beaucoup, vous pouvez déjà faire circuler les données partout où vous voulez. L'analyse des données dépend de la façon dont vous concevez la structure des données pouvant inclure un conteneur qui enveloppe une charge utile.

« ... quel que soit HTTP est à venir au serveur en bits d'information utilisables, et générer la réponse HTTP appropriée »

... mais ce n'est pas différent de la façon dont vous gérez la requête HTTP sur le serveur en utilisant votre langage côté serveur.

... comment mettre en œuvre un processus back-end en C/C++, au lieu d'installer un paquet comme PHP

Si l'appareil embarqué est programmé en C/C++, vous devez savoir comment faire programmation de socket en C/C++. Sur votre serveur Web, vous devez également savoir comment programmer la socket, sauf que ce sera dans cette langue côté serveur.

Espérons que cela aide.