O Node.js, a plataforma que possibilita executar JavaScript do lado do servidor, construída sobre o Google V8, ganhou uma nova API de streaming em sua versão 0.9.4. Apelidada de "streams2", a API está agendada para inclusão na versão estável 0.10.
A nova API estabelece mecanismos de proteção contra a perda de dados, através da inicialização de streams em modo pausado: a streams2 só emite eventos de dados depois que manipuladores de eventos forem anexados. O estado pausado garante que nenhum evento de dados seja emitido. Além disso, um novo método read() foi criado, possibilitando que um número arbitrário de bytes sejam lidos do stream, deixando os demais bytes disponíveis para outra aplicação consumí-los.
Os métodos e eventos antigos foram mantidos, visando compatibilidade retroativa:
Streams de leitura mudam para o "modo antigo" quando um manipulador de eventos de dados (data events) é anexado, ou quando são executados os métodos pause() ou resume(). O efeito disso é que mesmo que não se esteja utilizando o novo método "read" e os eventos "readable", não é necessário mais se preocupar com a perda de partes de dados.
Com isso, uma situação limite passa a existir: se nenhum manipulador do evento de dados for criado, e os métodos pause() e resume() nunca forem executados, o stream nunca emitirá o evento "end" e permanecerá pausado para sempre.
Uma nova implementação de Streams vem sendo discutida desde a versão 0.4 do Node.js, mas outros problemas mais urgentes eram sempre passados à frente. Além disso a compatibilidade retroativa era considerada difícil de ser implementada, sendo necessária para garantir a adoção das novas funcionalidades. Na versão 0.10, a questão será finalmente resolvida, e os desenvolvedores já são encorajados a testar a nova API e fornecer feedback sobre seu funcionamento.
O Node.js foi projetado para a criação de aplicações em rede, escaláveis e de alto desempenho. É desenvolvido pela empresa Joyent Inc e pela comunidade open source, sendo atualmente utilizado por grandes empresas como a Microsoft, LinkedIn e eBay.