Lors de mon dernier article sur nodecast je terminais sur la possibilité d’y intégrer un serveur web pour remplacer le serveur ruby Thin qui exposait l’API HTTP REST. C’est maintenant chose faite, la libqxt via son module QxtWeb m’a permis de mettre en œuvre assez simplement un serveur web dans un thread du serveur ncs. J’ai migré tout le projet sur github, le code du serveur est visible ici : http_api.cpp. Ce how to m’a été très utile : How to create a simple webservice using qt and libqxt
Dans la lancée j’ai également intégré un serveur XMPP grâce à QXmpp ce qui permet au client Geekast d’effectuer des push en XMPP. Il fonctionne également dans son propre thread. Outre la rapidité de ce protocole face à HTTP, cela va permettre aux clients Geekast d’avoir une socket persistante avec le serveur ncs et donc permettre à celui-ci de faire du push vers tous les clients connectés. Les usages restent à définir mais cette possibilité ouvre un grand nombre de portes. Par exemple proposer la possibilité d’agir sur tous ses clients geekast depuis l’interface web (kill de processus, etc). L’envoi par HTTP sera toujours présent dans le client, au cas où la connexion XMPP est impossible (firewall, etc).
L’autre avancée est sur le format de donnée entre le client et le serveur, qui migre du XML vers JSON via QxtJson. Ainsi le serveur ncs qui reçoit les payload en json peut directement les transformer en bson object, format binaire de MongoDB. Plus besoin de passer par un lourd parsing du xml et des conversions vers des tableaux pour en extraire les données. La ligne suivante montre la simplicité d’une telle conversion :
bson::bo m_bo_json = mongo::fromjson(json.toStdString());
Le serveur ncs est donc maintenant autonome, Ruby est uniquement utilisé pour l’exécution du frontal web en Ruby on Rails.
Pour finir, voici un schéma du fonctionnement interne du serveur ncs.
