Vous n'êtes pas connecté. Connexion
|
|
TP WebSockets: écriture d'un programme de chat en HTML5De $1Table des matières
Découverte des web sockets HTML5Pour ce TP vous aurez besoin d'un micro serveur qui gère les web socketss. On va utiliser NodeJS un serveur web très populaire en ce moment pour les applications multi-participantes HTML5. Il est écrit en Python mais il embarque l'interpréteur JavaScript V8 de Chrome. Le code applicatif côté serveur n'est ni du PHP, ni du Java, mais du ... JavaScript ! Etude d'un programme de chatLe serveur web NodeJSNodeJS est un serveur très très minimal par défaut mais on peut l'étendre en lui ajoutant des "modules". Exemple de modules que nous allons utiliser:
IMPORTANT: les auteurs de NowJS travaillaient dans une startup qui a été racheté et le site nowJS.com est fermé ("I'm no longer maintaining NowJS. I don't have much time to devote to NowJS as I'm working full-time on another startup. I'm sorry to drop the ball on development and bugs! You might want to look at other projects like dnode which are still being actively developed. Darshan") . Des développeurs ont repris le projet open source et ont annoncé qu'ils continuaient à le maintenir. En attendant, vous pouvez consulter la dernière version du site archivée ici : http://web.archive.org/web/201107142...p://nowjs.com/. Il existe d'autres solutions alternatives à nowJS comme : http://www.meteor.com ou Installation de NodeJSSous windows c'est assez compliqué à cause de certains modules qui nécessitent une recompilation à la volée. Pour ce TP au lieu d'installer NodeJS depuis le site officiel, puis utiliser la commande "npm" (Node Package Manager), qui télécharge les modules un par un, vous allez directement installer les logiciels qui vous sont fournis dans une archive:
Une fois tout ceci installé, ouvrez une fenêtre DOS et tapez "node --version", cela devrait afficher "node 0.6.x..." Test d'une première application NodeJS
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8124, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8124/'); Sauvez le et exécutez la commande suivante : node test.js
Ouvrez cet URL dans votre navigateur ! Vous devriez avoir : Vous venez d'exécuter votre première application NodeJS ;-) Test de l'application de chatAllez dans le répertoire où vous avez dézippé ChatNowJs.zip. Exécutez la commande : "node simpleChat_server.js", et ouvrez http://localhost:8080 dans votre navigateur. Ouvrez deux onglets sur cet URL, vous devez avoir un champ de saisie dans chaque page. Tapez quelque chose, cela devrait apparaitre dans l'autre fenêtre (les deux sont en réalité des clients connectés au même serveur de WebSockets ). Etude de l'application de chatDeux fichiers tout petits à étudier !
Ouvrez ces fichiers avec un éditeur : ouch que c'est... petit ! Oui, on utilise ici la notion d'objets distribués, le code client qui tourne dans le navigateur appelle du code qui tourne dans le serveur et inversement. Pas de réseau au milieu ! En fait si... mais on fait comme si il n'y en avait pas ! Le module NodeJS qui fait ceci est magique, il s'appelle NowJS ! NowJS définit une "poche magique" appelée "now" : en fait une variable JavaScript que l'on manipule depuis le code qui tourne sur le client, dans le navigateur, et qui contient les variables et méthodes et objets partagés entre le client et le serveur distant. Le serveur peut utiliser une variable "everyone.now" pour définir et utiliser les variables et méthodes partagées. Par exemple, côté serveur on définit la fonctionn Serveur : everyone.now.distributeMessage = function(message){ everyone.now.receiveMessage(this.now.name, message); }; Appel par un des clients (voir simpleChat.html) : $("#send-button").click(function(){ now.distributeMessage($("#text-input").val()); $("#text-input").val(""); }); Ainsi un clic sur le bouton "send" dans la page exécute Client : now.receiveMessage = function(name, message){ $("#messages").append("<br>" + name + ": " + message); } Et cette fonction, localisée côté client, va juste afficher dans la page le texte du message reçu ! De la même manière, une variable déclarée côté client comme: now.name = prompt("What's your name?", ""); Peut être récupérée directement par le serveur à l'aide de Serveur : everyone.now.distributeMessage = function(message){ everyone.now.receiveMessage(this.now.name, message); }; A l'aide de ce paradigme, NowJS permet de développer très rapidement des applications collaboratives avec des WebSockets. Remarquez que les objets sont envoyés tels quels, pas en XML ou en JSON ! (Ils sont en réalité transformés en JSON en coulisse). |
Powered by MindTouch Deki Open Source Edition v.8.08 |