﻿1
00:00:01,280 --> 00:00:04,030
‫Instrutor: Streams são outro conceito fundamental no

2
00:00:04,030 --> 00:00:05,260
‫Node. JS.

3
00:00:05,260 --> 00:00:07,063
‫Portanto, agora vamos aprender tudo sobre eles.

4
00:00:08,370 --> 00:00:11,020
‫Em primeiro lugar, o que são streams?

5
00:00:11,020 --> 00:00:15,530
‫Bem, com streams, podemos processar dados de leitura e gravação de significados,

6
00:00:15,530 --> 00:00:19,150
‫peça por peça, sem completar toda a operação de

7
00:00:19,150 --> 00:00:20,760
‫leitura ou gravação.

8
00:00:20,760 --> 00:00:23,930
‫Portanto, não precisamos manter todos os dados na

9
00:00:23,930 --> 00:00:26,080
‫memória para fazer essas operações.

10
00:00:26,080 --> 00:00:29,020
‫Por exemplo, quando lemos um arquivo usando streams,

11
00:00:29,020 --> 00:00:31,990
‫lemos parte dos dados, fazemos algo com eles,

12
00:00:31,990 --> 00:00:36,080
‫então liberamos nossa memória e repetimos isso até que todo o arquivo

13
00:00:36,080 --> 00:00:37,510
‫tenha sido processado.

14
00:00:37,510 --> 00:00:39,870
‫Ou pense no YouTube ou Netflix, que

15
00:00:39,870 --> 00:00:42,210
‫são chamados de empresas de

16
00:00:42,210 --> 00:00:45,540
‫streaming porque fazem streaming de vídeo usando o mesmo princípio.

17
00:00:45,540 --> 00:00:48,940
‫Portanto, em vez de esperar até que todo o arquivo de vídeo

18
00:00:48,940 --> 00:00:52,051
‫seja carregado, o processamento é feito peça por peça ou

19
00:00:52,051 --> 00:00:55,700
‫em partes para que você possa começar a assistir antes mesmo de todo

20
00:00:55,700 --> 00:00:57,180
‫o arquivo ser baixado.

21
00:00:57,180 --> 00:01:00,140
‫Portanto, o principal aqui não é apenas sobre o Node. JS

22
00:01:00,140 --> 00:01:03,620
‫Mas universal para a ciência da computação em geral.

23
00:01:03,620 --> 00:01:07,250
‫Como você pode ver, isso torna os streams o candidato

24
00:01:07,250 --> 00:01:10,490
‫perfeito para lidar com grandes volumes de dados como,

25
00:01:10,490 --> 00:01:14,280
‫por exemplo, vídeo ou também dados que estamos recebendo peça por

26
00:01:14,280 --> 00:01:16,250
‫peça de uma fonte externa.

27
00:01:16,250 --> 00:01:19,270
‫Além disso, o streaming torna o processamento de dados mais eficiente

28
00:01:19,270 --> 00:01:21,960
‫em termos de memória porque não há necessidade

29
00:01:21,960 --> 00:01:25,530
‫de manter todos os dados na memória e também em termos de tempo

30
00:01:25,530 --> 00:01:28,470
‫porque podemos começar a processar os dados à medida que

31
00:01:28,470 --> 00:01:31,223
‫chegam, em vez de esperar até que tudo chegue.

32
00:01:32,430 --> 00:01:35,210
‫Ok, agora que sabemos o que são streams, vamos

33
00:01:35,210 --> 00:01:37,870
‫falar um pouco sobre como eles são implementados no

34
00:01:37,870 --> 00:01:39,100
‫Node. JS

35
00:01:39,100 --> 00:01:43,197
‫Portanto, no Node, existem quatro tipos fundamentais de streams:

36
00:01:43,197 --> 00:01:46,583
‫streams legíveis, streams graváveis, streams duplex e

37
00:01:46,583 --> 00:01:48,700
‫streams de transformação.

38
00:01:48,700 --> 00:01:50,780
‫Mas os legíveis e graváveis são

39
00:01:50,780 --> 00:01:52,370
‫os mais importantes.

40
00:01:52,370 --> 00:01:55,370
‫E então vamos nos concentrar mais nesses dois.

41
00:01:55,370 --> 00:01:58,660
‫Portanto, streams legíveis são aqueles a partir dos quais podemos ler.

42
00:01:58,660 --> 00:02:02,410
‫Podemos consumir dados, faz sentido certo?

43
00:02:02,410 --> 00:02:06,080
‫Agora os streams estão em todos os módulos principais do Node.

44
00:02:06,080 --> 00:02:09,010
‫Um pouco como eventos, como falamos antes.

45
00:02:09,010 --> 00:02:12,490
‫Por exemplo, os dados que chegam quando um servidor http

46
00:02:12,490 --> 00:02:15,700
‫obtém uma solicitação são, na verdade, um fluxo legível.

47
00:02:15,700 --> 00:02:19,160
‫Portanto, todos os dados enviados com a solicitação vêm

48
00:02:19,160 --> 00:02:22,490
‫em partes e não em uma grande parte.

49
00:02:22,490 --> 00:02:25,270
‫Outro exemplo do sistema de arquivos é

50
00:02:25,270 --> 00:02:27,867
‫que podemos ler um arquivo peça

51
00:02:27,867 --> 00:02:31,170
‫por peça usando uma tela de leitura do módulo

52
00:02:31,170 --> 00:02:35,010
‫FS, que pode ser bastante útil para arquivos de texto grandes.

53
00:02:35,010 --> 00:02:37,400
‫Tudo bem, agora outra coisa importante a

54
00:02:37,400 --> 00:02:39,994
‫se notar é que os fluxos são, na

55
00:02:39,994 --> 00:02:42,320
‫verdade, instâncias da classe EventEmitter.

56
00:02:42,320 --> 00:02:45,490
‫O que significa que todos os streams podem emitir e

57
00:02:45,490 --> 00:02:46,730
‫ouvir eventos nomeados.

58
00:02:46,730 --> 00:02:49,530
‫Exatamente como aprendemos na última palestra.

59
00:02:49,530 --> 00:02:52,260
‫No caso de fluxos legíveis, eles podem emitir

60
00:02:52,260 --> 00:02:54,710
‫e podemos ouvir muitos eventos diferentes.

61
00:02:54,710 --> 00:02:58,920
‫Mas os dois mais importantes são os dados e os eventos finais.

62
00:02:58,920 --> 00:03:01,660
‫O evento de dados é emitido quando há um

63
00:03:01,660 --> 00:03:03,020
‫novo dado para

64
00:03:03,020 --> 00:03:05,710
‫consumir e o evento final é emitido assim

65
00:03:05,710 --> 00:03:07,920
‫que não há mais dados para consumir.

66
00:03:07,920 --> 00:03:09,570
‫E, claro, podemos reagir a

67
00:03:09,570 --> 00:03:11,220
‫esses eventos de acordo.

68
00:03:11,220 --> 00:03:14,670
‫E vamos fazer exatamente isso no próximo vídeo.

69
00:03:14,670 --> 00:03:17,193
‫Então, para praticar como trabalhar com streams.

70
00:03:18,170 --> 00:03:21,350
‫Finalmente, além de eventos, também temos funções importantes que

71
00:03:21,350 --> 00:03:23,050
‫podemos usar em streams.

72
00:03:23,050 --> 00:03:25,110
‫E no caso de fluxos legíveis,

73
00:03:25,110 --> 00:03:28,770
‫os mais importantes são o pipe e as funções de leitura.

74
00:03:28,770 --> 00:03:31,760
‫E novamente, você verá isso em ação no

75
00:03:31,760 --> 00:03:34,470
‫próximo vídeo, especialmente a função de tubo

76
00:03:34,470 --> 00:03:37,520
‫super importante, que basicamente nos permite conectar streams,

77
00:03:37,520 --> 00:03:39,960
‫passando dados de um stream para

78
00:03:39,960 --> 00:03:43,040
‫outro sem ter que nos preocupar muito com eventos.

79
00:03:43,040 --> 00:03:45,893
‫Ok, a seguir, streams graváveis são aqueles

80
00:03:45,893 --> 00:03:48,060
‫nos quais podemos gravar dados.

81
00:03:48,060 --> 00:03:51,330
‫Então, basicamente, o oposto de streams legíveis.

82
00:03:51,330 --> 00:03:55,440
‫Um ótimo exemplo é a resposta http que podemos enviar de volta ao

83
00:03:55,440 --> 00:03:58,530
‫cliente e que é, na verdade, um fluxo gravável.

84
00:03:58,530 --> 00:04:01,760
‫Portanto, um fluxo no qual podemos gravar dados.

85
00:04:01,760 --> 00:04:04,650
‫Então, quando queremos enviar dados, temos que escrever em algum

86
00:04:04,650 --> 00:04:05,483
‫lugar, certo?

87
00:04:05,483 --> 00:04:09,200
‫E esse lugar é um stream gravável, e isso

88
00:04:09,200 --> 00:04:11,570
‫faz todo o sentido, certo?

89
00:04:11,570 --> 00:04:14,750
‫Por exemplo, se quiséssemos enviar um grande arquivo de

90
00:04:14,750 --> 00:04:17,182
‫vídeo a um cliente, transmitiríamos esse

91
00:04:17,182 --> 00:04:20,120
‫resultado exatamente como o Netflix ou o YouTube fazem.

92
00:04:20,120 --> 00:04:23,130
‫Agora sobre eventos, os mais importantes são os eventos

93
00:04:23,130 --> 00:04:25,268
‫de drenagem e de chegada.

94
00:04:25,268 --> 00:04:27,040
‫E as funções mais importantes

95
00:04:27,040 --> 00:04:29,000
‫são as funções de escrita e final,

96
00:04:29,000 --> 00:04:31,850
‫algumas das quais você verá em ação na próxima aula.

97
00:04:32,720 --> 00:04:34,830
‫Agora, rapidamente, sobre streams duplex.

98
00:04:34,830 --> 00:04:38,070
‫Eles são simplesmente streams que podem ser lidos e

99
00:04:38,070 --> 00:04:39,530
‫gravados ao mesmo tempo.

100
00:04:39,530 --> 00:04:41,140
‫Esses são um pouco menos comuns.

101
00:04:41,140 --> 00:04:44,320
‫Mas de qualquer forma, um bom exemplo seria um soquete

102
00:04:44,320 --> 00:04:45,980
‫web do módulo de rede.

103
00:04:45,980 --> 00:04:49,194
‫E um web socket é basicamente apenas um

104
00:04:49,194 --> 00:04:53,130
‫canal de comunicação entre o cliente e o servidor que funciona nas

105
00:04:53,130 --> 00:04:56,840
‫duas direções e permanece aberto depois que a conexão é estabelecida.

106
00:04:56,840 --> 00:05:00,191
‫Por fim, os streams de transformação são streams duplex,

107
00:05:00,191 --> 00:05:03,670
‫portanto, streams que são legíveis e graváveis, que ao

108
00:05:03,670 --> 00:05:06,588
‫mesmo tempo podem modificar ou transformar os

109
00:05:06,588 --> 00:05:09,900
‫dados à medida que são lidos ou gravados.

110
00:05:09,900 --> 00:05:12,970
‫Um bom exemplo disso é o módulo

111
00:05:12,970 --> 00:05:17,250
‫principal zlib para compactar dados que realmente usam um fluxo de transformação.

112
00:05:17,250 --> 00:05:20,220
‫Tudo bem, esses são os quatro tipos de

113
00:05:20,220 --> 00:05:23,300
‫streams e uma ampla visão geral de como podemos usá-los.

114
00:05:23,300 --> 00:05:25,220
‫Agora, há algo importante a

115
00:05:25,220 --> 00:05:26,470
‫ser mencionado aqui

116
00:05:26,470 --> 00:05:29,140
‫antes de prosseguirmos, que é um fato que

117
00:05:29,140 --> 00:05:32,010
‫esses eventos e funções que eu mostrei a vocês

118
00:05:32,010 --> 00:05:34,680
‫são para consumir streams que já estão implementados

119
00:05:34,680 --> 00:05:37,320
‫como os que mostrei aqui como nossos exemplos.

120
00:05:37,320 --> 00:05:41,000
‫Assim, por exemplo, o Node implementou essas solicitações e

121
00:05:41,000 --> 00:05:42,750
‫respostas http como

122
00:05:42,750 --> 00:05:45,550
‫fluxos e podemos consumir, podemos usá-los usando

123
00:05:45,550 --> 00:05:48,130
‫os eventos e funções que estão disponíveis

124
00:05:48,130 --> 00:05:50,170
‫para cada tipo de fluxo.

125
00:05:50,170 --> 00:05:52,980
‫Podemos, é claro, também implementar nossos próprios

126
00:05:52,980 --> 00:05:56,660
‫fluxos e, em seguida, consumi-los usando esses mesmos eventos e funções.

127
00:05:56,660 --> 00:05:59,810
‫No entanto, isso seria um vídeo para outra hora

128
00:05:59,810 --> 00:06:01,810
‫porque, para construir a

129
00:06:01,810 --> 00:06:04,960
‫maioria dos aplicativos, é mais importante saber como realmente

130
00:06:04,960 --> 00:06:06,980
‫consumir streams, não realmente como implementá-los.

131
00:06:06,980 --> 00:06:09,130
‫Tudo bem, então vamos agora seguir em frente

132
00:06:09,130 --> 00:06:11,113
‫e realmente usar os streams na prática.

