Gerar e consumir dados sob demanda com Node Stream, de backend para backend.
Node stream são funções para processar dados sob demanda.
-
server.js Gera os dados com a classe Readable do pacote nativo stream do node.
- OBS: O createServer() não manipula promises, então se der erro, vai estourar exceção não tratada.
-
client.js Consome os dados com axios e com o responseType: 'stream'. Processa os dados com a classe Transform do pacote nativo stream do node. Saída dos dados com a classe Writable do pacote nativo stream do node.
- OBS: Não colocar async no método transform(), porque internamente ele não trabalha com função assíncrona. Se colocar, vai funcionar, mas se der uma exceção ele não vai saber como controlar e aí pode ter vazamento de memória, porque a stream não conseguiu ser fechada a tempo.
- Se precisar de async, pode colocar promise com um then ou uma closure com callback no then no corpo do método.
- OBS: Se o cliente não se adequar para receber os dados como streams, aí vai esperar receber tudo para só depois processar e fazer a saída.
#!/bin/bash
## Initialize the project:
npm init
## Incluir o ECMAScript Modules no "package.json":
"type":"module"
## Instalar o live-reloading "nodemon":
npm install -D nodemon
## Criar os scripts para execução no "package.json":
"scripts": {
"client":"nodemon src/client.js",
"server":"nodemon src/server.js"
},
## Subir o client.js e o server.js com o nodemon em terminais separados
npm run server
npm run client
## Executar o server no terminal do client
curl http://localhost:3000
- Youtube: Live Coding
- Github: ErickWendel/live-streams-beginners-guide
- Node tem classes prontas para streams.
- Readable streams
- Entrada (fonte) de dados: Gera os dados. Ex: file, transmissão de audio ou video, etc. É tudo que estiver chegando.
- Writable streams
- Saída de dados: Finaliza o processo e escreve dado em algum lugar. Ex: console.log, mensagem, file, etc. É sempre a última etapa do pipeline.
- Transform streams
- Processamento dos dados: Transforma os dados de entrada. Ex: filtrar os dados, transformar em outro formato, renomear, etc. Sempre fica no meio.
- Readable streams
- Node Stream com processos filhos.
- UNDICI A HTTP/1.1 client, written from scratch for Node.js.
- web sockets para receber vários dados ao mesmo tempo na web.
- web artici para comunicar vários dados ao mesmo tempo na web.
- O browser lê o html como um arquivo e não como uma string.
- web streams não é tão difundido na comunidade, nem todos os devs usam. Um pouco mais dificil que node streams.