node.js pipe named-pipes

¿Cómo crear una tubería con nombre en node.js?



pipe named-pipes (3)

¿Cómo crear una tubería con nombre en node.js?

PD: Por ahora estoy creando una tubería con nombre de la siguiente manera. Pero creo que esta no es la mejor manera.

var mkfifoProcess = spawn(''mkfifo'', [fifoFilePath]); mkfifoProcess.on(''exit'', function (code) { if (code == 0) { console.log(''fifo created: '' + fifoFilePath); } else { console.log(''fail to create fifo with code: '' + code); } });


Trabajar con tuberías con nombre en Windows

Nodo v0.12.4

var net = require(''net''); var PIPE_NAME = "mypipe"; var PIPE_PATH = "////.//pipe//" + PIPE_NAME; var L = console.log; var server = net.createServer(function(stream) { L(''Server: on connection'') stream.on(''data'', function(c) { L(''Server: on data:'', c.toString()); }); stream.on(''end'', function() { L(''Server: on end'') server.close(); }); stream.write(''Take it easy!''); }); server.on(''close'',function(){ L(''Server: on close''); }) server.listen(PIPE_PATH,function(){ L(''Server: on listening''); }) // == Client part == // var client = net.connect(PIPE_PATH, function() { L(''Client: on connection''); }) client.on(''data'', function(data) { L(''Client: on data:'', data.toString()); client.end(''Thanks!''); }); client.on(''end'', function() { L(''Client: on end''); })

Salida:

Server: on listening Client: on connection Server: on connection Client: on data: Take it easy! Server: on data: Thanks! Client: on end Server: on end Server: on close

Nota sobre los nombres de las tuberías:

C / C ++ / Nodejs:
//./pipe/PIPENAME CreateNamedPipe

.Net / Powershell:
//./PIPENAME NamedPipeClientStream / NamedPipeServerStream

Ambos utilizarán el identificador de archivo:
/Device/NamedPipe/PIPENAME


Parece que las canalizaciones de nombres no son y no serán compatibles con el núcleo de Node, de Ben Noordhuis el 11/11/11:

Windows tiene un concepto de canalizaciones con nombre, pero como mencionas mkfifo , asumo que te refieres a los FIFO de UNIX.

No los admitimos y, probablemente, nunca lo haremos (los FIFO en el modo de no bloqueo tienen el potencial de bloquear el bucle de eventos) pero puede usar sockets UNIX si necesita una funcionalidad similar.

https://groups.google.com/d/msg/nodejs/9TvDwCWaB5c/udQPigFvmgAJ

Las tuberías y los sockets con nombre son muy similares, sin embargo, el módulo de net implementa sockets locales al especificar una path en lugar de un host y un port :

Ejemplo:

var net = require(''net''); var server = net.createServer(function(stream) { stream.on(''data'', function(c) { console.log(''data:'', c.toString()); }); stream.on(''end'', function() { server.close(); }); }); server.listen(''/tmp/test.sock''); var stream = net.connect(''/tmp/test.sock''); stream.write(''hello''); stream.end();


Tal vez use fs.watchFile lugar de la tubería con nombre? Ver documentation