learnyounode
Version:
Learn You The Node.js For Much Win! An intro to Node.js via a set of self-guided workshops.
59 lines (39 loc) • 2.26 kB
Markdown
¡Crea un **Servidor de tiempo y hora TCP **!
El servidor debe escuchar conexiones TCP en el puerto indicado por el primer argumento del programa. Para cada conexión debes escribir la fecha actual y la hora en formato 24hs del siguiente modo:
```
"AAAA-MM-DD hh:mm"
```
seguido por un carácter **newline**('\n'). Tanto el mes, el día como la hora y minuto deben tener un 0 para ocupar 2 espacios, por ejemplo:
```
"2013-07-06 17:42"
```
----------------------------------------------------------------------
## PISTAS
Para este ejercicio crearemos un servidor TCP en lugar de usar el módulo HTTP usaremos el módulo `net` del núcleo de Node que tiene funcionalidades de red.
El módulo `net` tiene un método `net.createServer()` que recibe un callback. A diferencia de otros callbacks en Node, el callback `createServer()` se llama una vez por cada conexión entrante. La firma es la siguiente:
```js
function callback (socket) { /* ... */ }
```
`net.createServer()` devuelve una variable instancia de `server`. Para iniciar la escucha del servicio hay que llamar a `server.listen(portNumber)`.
Un ejemplo de un servidor Node típico es como sigue:
```js
const net = require('net')
const server = net.createServer(function (socket) {
// manejo del socket
})
server.listen(8000)
```
Recuerda usar el puerto recibido por argumento.
El objeto `socket` contiene información sobre la conexión y es un Stream duplex, es decir que se puede escribir y leer a la vez.
Puedes usar `socket.write(data)` para escribir en el socket y luego `socket.end()` para cerrar el socket. Alternativamente, el método `end()` puede recibir un objeto de datos `socket.end(data)`.
La documentación del módulo `net` puede verse en:
{rootdir:/docs-nodejs/net.html}
Para calcular la fecha puedes usar `new Date()` y luego llamar a algunos métodos específicos:
```js
date.getFullYear()
date.getMonth() // empieza en 0
date.getDate() // devuelve día del mes, empieza en 1
date.getHours()
date.getMinutes()
```
Otra opción más intrépida es usar el paquete `strftime` disponible en npm. La función `strftime(formato, fecha)` recibe un formato de fecha similar al `date` de UNIX. Más información de strftime en: https://github.com/samsonjs/strftime