Não. Um pipeline é um canal de comunicação unidirecional. É por isso que é chamado de "pipeline"; você também não poderia enviar o óleo de volta a um pipeline se você tentasse.
No entanto, se o bar.js tiver que falar com o foo.js também, você tem algumas opções:
- Crie um soquete de domínio unix em vez de um pipeline e inicie os dois
foo.js
ebar.js
separadamente (ou seja, não direcione mais a saída de foo.js para bar.js). Eu não sei como você faz isso a partir do nó, mas essencialmente um soquete de domínio unix é um soquete de rede que usa nomes de arquivos em vez de endereços IP e funciona dentro do kernel. Os soquetes são destinados à comunicação bidirecional, mas requerem mais configurações do que um simples pipe (por exemplo, um soquete de escuta pode falar com várias instâncias de bar.js). Você pode encontrar soquetes de domínio unix no sistema de arquivos, mas não é estritamente necessário (e, de fato, o Linux permite criar um soquete de domínio unix sem um rastreio no sistema de arquivos). - Use
mkfifo
para criar um pipe nomeado (ou use alguma API do nó para criar um, se ele existir; novamente, eu não sei o nó). Em seguida, emfoo.js
, abra esse pipe nomeado e leia-o. Seu scriptbar.js
pode abrir o mesmo pipe nomeado e gravar nele.
O último será o mais fácil para a transição, pois você ainda usa E / S de arquivo (abrir um canal nomeado requer a abertura de um arquivo no sistema de arquivos), mas ainda seria unidirecional (embora você tivesse dois canais, um em cada direção). O primeiro é um pouco mais limpo e também permite migrar com mais facilidade um dos dois scripts para um host diferente, se isso for necessário.
De qualquer forma, se os seus scripts agora estão se comunicando bidirecionalmente, então, para maior clareza, sugiro que você os inicie como processos separados, em vez de ter um canal de processo no outro. IMHO, eles são parceiros iguais agora, e sua linha de comando deve mostrar isso. Isso é apenas um detalhe, e certamente não é tecnicamente necessário.