¿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
:
- http://nodejs.org/api/net.html#net_server_listen_path_callback
- http://nodejs.org/api/net.html#net_net_connect_path_connectlistener
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