‫Instrutor: Streams são outro conceito fundamental no
‫Node. JS.
‫Portanto, agora vamos aprender tudo sobre eles.
‫Em primeiro lugar, o que são streams?
‫Bem, com streams, podemos processar dados de leitura e gravação de significados,
‫peça por peça, sem completar toda a operação de
‫leitura ou gravação.
‫Portanto, não precisamos manter todos os dados na
‫memória para fazer essas operações.
‫Por exemplo, quando lemos um arquivo usando streams,
‫lemos parte dos dados, fazemos algo com eles,
‫então liberamos nossa memória e repetimos isso até que todo o arquivo
‫tenha sido processado.
‫Ou pense no YouTube ou Netflix, que
‫são chamados de empresas de
‫streaming porque fazem streaming de vídeo usando o mesmo princípio.
‫Portanto, em vez de esperar até que todo o arquivo de vídeo
‫seja carregado, o processamento é feito peça por peça ou
‫em partes para que você possa começar a assistir antes mesmo de todo
‫o arquivo ser baixado.
‫Portanto, o principal aqui não é apenas sobre o Node. JS
‫Mas universal para a ciência da computação em geral.
‫Como você pode ver, isso torna os streams o candidato
‫perfeito para lidar com grandes volumes de dados como,
‫por exemplo, vídeo ou também dados que estamos recebendo peça por
‫peça de uma fonte externa.
‫Além disso, o streaming torna o processamento de dados mais eficiente
‫em termos de memória porque não há necessidade
‫de manter todos os dados na memória e também em termos de tempo
‫porque podemos começar a processar os dados à medida que
‫chegam, em vez de esperar até que tudo chegue.
‫Ok, agora que sabemos o que são streams, vamos
‫falar um pouco sobre como eles são implementados no
‫Node. JS
‫Portanto, no Node, existem quatro tipos fundamentais de streams:
‫streams legíveis, streams graváveis, streams duplex e
‫streams de transformação.
‫Mas os legíveis e graváveis são
‫os mais importantes.
‫E então vamos nos concentrar mais nesses dois.
‫Portanto, streams legíveis são aqueles a partir dos quais podemos ler.
‫Podemos consumir dados, faz sentido certo?
‫Agora os streams estão em todos os módulos principais do Node.
‫Um pouco como eventos, como falamos antes.
‫Por exemplo, os dados que chegam quando um servidor http
‫obtém uma solicitação são, na verdade, um fluxo legível.
‫Portanto, todos os dados enviados com a solicitação vêm
‫em partes e não em uma grande parte.
‫Outro exemplo do sistema de arquivos é
‫que podemos ler um arquivo peça
‫por peça usando uma tela de leitura do módulo
‫FS, que pode ser bastante útil para arquivos de texto grandes.
‫Tudo bem, agora outra coisa importante a
‫se notar é que os fluxos são, na
‫verdade, instâncias da classe EventEmitter.
‫O que significa que todos os streams podem emitir e
‫ouvir eventos nomeados.
‫Exatamente como aprendemos na última palestra.
‫No caso de fluxos legíveis, eles podem emitir
‫e podemos ouvir muitos eventos diferentes.
‫Mas os dois mais importantes são os dados e os eventos finais.
‫O evento de dados é emitido quando há um
‫novo dado para
‫consumir e o evento final é emitido assim
‫que não há mais dados para consumir.
‫E, claro, podemos reagir a
‫esses eventos de acordo.
‫E vamos fazer exatamente isso no próximo vídeo.
‫Então, para praticar como trabalhar com streams.
‫Finalmente, além de eventos, também temos funções importantes que
‫podemos usar em streams.
‫E no caso de fluxos legíveis,
‫os mais importantes são o pipe e as funções de leitura.
‫E novamente, você verá isso em ação no
‫próximo vídeo, especialmente a função de tubo
‫super importante, que basicamente nos permite conectar streams,
‫passando dados de um stream para
‫outro sem ter que nos preocupar muito com eventos.
‫Ok, a seguir, streams graváveis são aqueles
‫nos quais podemos gravar dados.
‫Então, basicamente, o oposto de streams legíveis.
‫Um ótimo exemplo é a resposta http que podemos enviar de volta ao
‫cliente e que é, na verdade, um fluxo gravável.
‫Portanto, um fluxo no qual podemos gravar dados.
‫Então, quando queremos enviar dados, temos que escrever em algum
‫lugar, certo?
‫E esse lugar é um stream gravável, e isso
‫faz todo o sentido, certo?
‫Por exemplo, se quiséssemos enviar um grande arquivo de
‫vídeo a um cliente, transmitiríamos esse
‫resultado exatamente como o Netflix ou o YouTube fazem.
‫Agora sobre eventos, os mais importantes são os eventos
‫de drenagem e de chegada.
‫E as funções mais importantes
‫são as funções de escrita e final,
‫algumas das quais você verá em ação na próxima aula.
‫Agora, rapidamente, sobre streams duplex.
‫Eles são simplesmente streams que podem ser lidos e
‫gravados ao mesmo tempo.
‫Esses são um pouco menos comuns.
‫Mas de qualquer forma, um bom exemplo seria um soquete
‫web do módulo de rede.
‫E um web socket é basicamente apenas um
‫canal de comunicação entre o cliente e o servidor que funciona nas
‫duas direções e permanece aberto depois que a conexão é estabelecida.
‫Por fim, os streams de transformação são streams duplex,
‫portanto, streams que são legíveis e graváveis, que ao
‫mesmo tempo podem modificar ou transformar os
‫dados à medida que são lidos ou gravados.
‫Um bom exemplo disso é o módulo
‫principal zlib para compactar dados que realmente usam um fluxo de transformação.
‫Tudo bem, esses são os quatro tipos de
‫streams e uma ampla visão geral de como podemos usá-los.
‫Agora, há algo importante a
‫ser mencionado aqui
‫antes de prosseguirmos, que é um fato que
‫esses eventos e funções que eu mostrei a vocês
‫são para consumir streams que já estão implementados
‫como os que mostrei aqui como nossos exemplos.
‫Assim, por exemplo, o Node implementou essas solicitações e
‫respostas http como
‫fluxos e podemos consumir, podemos usá-los usando
‫os eventos e funções que estão disponíveis
‫para cada tipo de fluxo.
‫Podemos, é claro, também implementar nossos próprios
‫fluxos e, em seguida, consumi-los usando esses mesmos eventos e funções.
‫No entanto, isso seria um vídeo para outra hora
‫porque, para construir a
‫maioria dos aplicativos, é mais importante saber como realmente
‫consumir streams, não realmente como implementá-los.
‫Tudo bem, então vamos agora seguir em frente
‫e realmente usar os streams na prática.