UNPKG

learnyounode

Version:

Learn You The Node.js For Much Win! An intro to Node.js via a set of self-guided workshops.

88 lines (66 loc) 3.09 kB
Écrivez un **serveur de temps TCP** ! Votre serveur devrait attendre des connexions TCP entrantes sur le port dont le numéro vous sera fourni comme premier argument en ligne de commande. À chaque connexion, vous écrirez sur la socket la date et l’heure courante, en mode 24 heures, selon le format suivant : ``` "YYYY-MM-DD hh:mm" ``` suivi d’un caractère **saut de ligne** (*newline*). Les mois, jour, heures et minutes doivent absolument être présentés sur 2 chiffres avec, si besoin, un *zéro préfixe*. Par exemple : ``` "2013-07-06 17:42" ``` ---------------------------------------------------------------------- ## CONSEILS Pour cet exercice, nous allons créer un serveur TCP brut. Il n’y a pas de besoin HTTP sur ce coup, nous allons donc utiliser le module `net`, un autre des modules noyaux de Node, qui fournit toutes les fonctions réseau de base. Le module `net` fournit une méthode appelée `net.createServer()`, qui prend une fonction de rappel. Contrairement à la plupart des fonctions de rappel de Node, celle utilisée par `createServer` peut être appelée plus d’une fois. Chaque connexion reçue par votre serveur déclenche un appel à votre fonction de rappel. Elle a la signature suivante : ```js function callback (socket) { /* ... */ } ``` `net.createServer()` renvoie également une instance de votre serveur. Vous devrez appeler `server.listen(portNumber)` pour démarrer l’écoute sur un port particulier. Un serveur TCP Node ressemble classiquement à ceci : ```js const net = require('net') const server = net.createServer(function (socket) { // logique de gestion de la socket }) server.listen(8000) ``` Souvenez-vous que le numéro de port vous sera fourni comme premier argument sur la ligne de commande. L’objet `socket` contient un tas de méta-données relatives à la connexion, mais se comporte aussi comme un flux duplex Node, c’est-à-dire qu’on peut lire et écrire dessus. Pour cet exercice, vous aurez juste besoin d’y écrire et de fermer la socket. Utilisez `socket.write(data)` pour écrire des données sur la socket, et `socket.end()` pour fermer la socket. Il est aussi possible de passer un dernier bloc de données à `.end()`, ce qui peut simplifier votre exercice comme ceci : `socket.end(data)`. La documentation hors-ligne pour le module noyau `net` peut être consultée à l’adresse suivante : {rootdir:/docs-nodejs/net.html} Pour créer la date, vous aurez besoin de construire un format spécial à partir d’un objet obtenu par un appel à `new Date()`. Les méthodes que vous pourrez trouver utiles sont : ```js date.getFullYear() date.getMonth() // démarre 0 ! date.getDate() // renvoie le jour du mois date.getHours() date.getMinutes() ``` Si vous vous sentez d’humeur aventureuse, vous pouvez aussi utiliser le module `strftime`, disponible via npm. La fonction `strftime(fmt, date)` accepte les mêmes formats de date que la commande Unix `date`. Vous pouvez en apprendre davantage sur `strftime` ici : https://github.com/samsonjs/strftime