﻿1
00:00:01,120 --> 00:00:03,120
‫Instructor: En este video y

2
00:00:03,120 --> 00:00:06,030
‫en el siguiente, nos sumergiremos en otra pieza

3
00:00:06,030 --> 00:00:08,870
‫importante de la arquitectura Node JS con eventos

4
00:00:08,870 --> 00:00:11,093
‫JS y arquitectura impulsada por eventos.

5
00:00:12,370 --> 00:00:15,210
‫Entonces, la mayoría de los módulos centrales de

6
00:00:15,210 --> 00:00:19,780
‫Node, como los que ya usamos, como HTTP, File System y Timers, están

7
00:00:19,780 --> 00:00:23,200
‫construidos alrededor de una arquitectura dirigida por eventos y,

8
00:00:23,200 --> 00:00:25,830
‫por supuesto, también podemos usar esta

9
00:00:25,830 --> 00:00:28,720
‫arquitectura para nuestra ventaja en nuestro propio código.

10
00:00:28,720 --> 00:00:31,910
‫Y el concepto es bastante simple.

11
00:00:31,910 --> 00:00:34,780
‫Entonces, en Node, hay ciertos objetos llamados emisores

12
00:00:34,780 --> 00:00:37,843
‫de eventos que emiten eventos con nombre tan

13
00:00:37,843 --> 00:00:41,520
‫pronto como sucede algo importante en la aplicación, como una

14
00:00:41,520 --> 00:00:45,360
‫solicitud que llega al servidor, un temporizador que expira o un

15
00:00:45,360 --> 00:00:47,660
‫archivo que termina de leerse.

16
00:00:47,660 --> 00:00:51,030
‫Estos eventos pueden ser recogidos por los oyentes de

17
00:00:51,030 --> 00:00:54,380
‫eventos que configuramos los desarrolladores, que activarán las

18
00:00:54,380 --> 00:00:58,870
‫funciones de devolución de llamada que están adjuntas a cada oyente, de acuerdo.

19
00:00:58,870 --> 00:01:02,150
‫Entonces, nuevamente, por un lado, tenemos emisores de eventos

20
00:01:02,150 --> 00:01:05,470
‫y, por otro lado, oyentes de eventos que reaccionarán a

21
00:01:05,470 --> 00:01:08,940
‫los eventos emitidos llamando a la función de devolución de llamada.

22
00:01:08,940 --> 00:01:10,540
‫Simple, ¿verdad?

23
00:01:10,540 --> 00:01:12,900
‫Y probablemente la mejor manera de entender

24
00:01:12,900 --> 00:01:14,630
‫esto es mirar un ejemplo.

25
00:01:14,630 --> 00:01:17,760
‫Entonces, entendamos brevemente cómo Node usa la

26
00:01:17,760 --> 00:01:21,330
‫arquitectura dirigida por eventos para manejar las solicitudes

27
00:01:21,330 --> 00:01:25,950
‫del servidor en el módulo HTTP que ya usamos en otra sección.

28
00:01:25,950 --> 00:01:28,600
‫Entonces, cuando queremos crear un servidor,

29
00:01:28,600 --> 00:01:30,384
‫usamos el método Create

30
00:01:30,384 --> 00:01:33,900
‫Server y lo guardamos en una variable de servidor.

31
00:01:33,900 --> 00:01:36,260
‫Esta implementación aquí es un poco diferente

32
00:01:36,260 --> 00:01:40,270
‫a la que hicimos antes, pero funciona exactamente de la misma manera.

33
00:01:40,270 --> 00:01:44,040
‫De todos modos, este servidor. El método on es

34
00:01:44,040 --> 00:01:49,040
‫cómo realmente creamos un oyente, y en este caso para el evento "request".

35
00:01:49,070 --> 00:01:51,390
‫Entonces, digamos que tenemos nuestro servidor

36
00:01:51,390 --> 00:01:53,770
‫en ejecución y se realiza una nueva solicitud.

37
00:01:53,770 --> 00:01:57,410
‫El servidor actúa como un emisor y automáticamente emitirá

38
00:01:57,410 --> 00:02:01,220
‫un evento llamado "solicitud" cada vez que una solicitud

39
00:02:01,220 --> 00:02:02,810
‫llegue al servidor.

40
00:02:02,810 --> 00:02:04,350
‫Simple, ¿verdad?

41
00:02:04,350 --> 00:02:07,100
‫Luego, dado que ya tenemos un oyente

42
00:02:07,100 --> 00:02:10,830
‫configurado para este evento exacto, se llamará automáticamente a la función

43
00:02:10,830 --> 00:02:14,000
‫de devolución de llamada que adjuntamos a este oyente.

44
00:02:14,000 --> 00:02:16,780
‫Y este tipo de función que

45
00:02:16,780 --> 00:02:20,040
‫ya conocemos antes, simplemente enviará algunos datos al cliente.

46
00:02:20,040 --> 00:02:22,970
‫Ahora, funciona de esta manera porque detrás de escena

47
00:02:22,970 --> 00:02:26,074
‫el servidor es en realidad una instancia de la

48
00:02:26,074 --> 00:02:28,980
‫clase Node JS EventEmitter, por lo que hereda

49
00:02:28,980 --> 00:02:32,500
‫toda esta lógica de emisión y escucha de eventos de

50
00:02:32,500 --> 00:02:35,410
‫esa clase EventEmitter, y no se preocupe, vamos

51
00:02:35,410 --> 00:02:38,410
‫a usar todo bien en el siguiente video, para

52
00:02:38,410 --> 00:02:41,210
‫que se familiarice con toda esta lógica.

53
00:02:41,210 --> 00:02:43,340
‫Ahora, solo para terminar esta lección,

54
00:02:43,340 --> 00:02:46,800
‫creo que es importante mencionar que esta lógica de EventEmitter

55
00:02:46,800 --> 00:02:49,960
‫se llama Patrón Observador en la programación Javascript

56
00:02:49,960 --> 00:02:53,160
‫en general, y es un patrón bastante popular con

57
00:02:53,160 --> 00:02:54,740
‫muchos casos usados.

58
00:02:54,740 --> 00:02:57,090
‫Entonces la idea es que coloco

59
00:02:57,090 --> 00:03:00,370
‫allí un observador, en este caso el oyente de eventos,

60
00:03:00,370 --> 00:03:03,450
‫que sigue esperando, sigue observando al sujeto que eventualmente

61
00:03:03,450 --> 00:03:06,486
‫emitirá el evento que el oyente está esperando.

62
00:03:06,486 --> 00:03:09,680
‫Y lo opuesto a este patrón son simplemente funciones que llaman

63
00:03:09,680 --> 00:03:12,370
‫a otras funciones, que es algo a lo que

64
00:03:12,370 --> 00:03:14,530
‫estamos más acostumbrados en realidad, ¿verdad?

65
00:03:14,530 --> 00:03:16,490
‫Pero el patrón del observador ha

66
00:03:16,490 --> 00:03:19,020
‫sido diseñado para reaccionar más que para llamar.

67
00:03:19,020 --> 00:03:22,330
‫Y eso se debe a que hay un gran beneficio

68
00:03:22,330 --> 00:03:25,248
‫de usar esta arquitectura, que es el hecho de

69
00:03:25,248 --> 00:03:27,420
‫que todo está más desacoplado.

70
00:03:27,420 --> 00:03:30,340
‫No tenemos, por ejemplo, funciones del módulo del

71
00:03:30,340 --> 00:03:33,610
‫sistema de archivos que llaman a funciones del módulo HTTP

72
00:03:33,610 --> 00:03:35,770
‫porque sería un gran lío.

73
00:03:35,770 --> 00:03:38,690
‫En cambio, estos módulos están muy bien desacoplados y

74
00:03:38,690 --> 00:03:41,470
‫son autónomos, cada uno de los cuales emite

75
00:03:41,470 --> 00:03:44,380
‫eventos a los que otras funciones, incluso si provienen

76
00:03:44,380 --> 00:03:46,120
‫de otros módulos, pueden responder.

77
00:03:46,120 --> 00:03:49,170
‫Además, el uso de una arquitectura impulsada por eventos

78
00:03:49,170 --> 00:03:52,390
‫hace que sea mucho más sencillo reaccionar varias veces

79
00:03:52,390 --> 00:03:53,760
‫al mismo evento.

80
00:03:53,760 --> 00:03:58,210
‫Todo lo que tenemos que hacer es configurar varios oyentes, ¿verdad?

81
00:03:58,210 --> 00:04:01,760
‫Está bien, y esa es la arquitectura impulsada por eventos de Node

82
00:04:01,760 --> 00:04:03,020
‫en pocas palabras.

83
00:04:03,020 --> 00:04:06,050
‫Y no se preocupe si esto parece un poco demasiado

84
00:04:06,050 --> 00:04:08,730
‫teórico, verá que esta lógica se usa en

85
00:04:08,730 --> 00:04:12,183
‫muchas situaciones a lo largo del curso, comenzando en el siguiente video.

