How to create a named pipe in node.js?
Working with named pipes on Windows
Node 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');})
Output:
Server: on listeningClient: on connectionServer: on connectionClient: on data: Take it easy!Server: on data: Thanks!Client: on endServer: on endServer: on close
Note about pipe names:
C/C++ / Nodejs:
\\.\pipe\PIPENAME
CreateNamedPipe
.Net / Powershell:
\\.\PIPENAME
NamedPipeClientStream / NamedPipeServerStream
Both will use file handle:
\Device\NamedPipe\PIPENAME
Looks like name pipes aren't and won't be supported in Node core - from Ben Noordhuis 10/11/11:
Windows has a concept of named pipes but since you mention
mkfifo
I assume you mean UNIX FIFOs.We don't support them and probably never will (FIFOs in non-blocking mode have the potential to deadlock the event loop) but you can use UNIX sockets if you need similar functionality.
https://groups.google.com/d/msg/nodejs/9TvDwCWaB5c/udQPigFvmgAJ
Named pipes and sockets are very similar however, the net
module implements local sockets by specifying a path
as opposed to a host
and port
:
- http://nodejs.org/api/net.html#net_server_listen_path_callback
- http://nodejs.org/api/net.html#net_net_connect_path_connectlistener
Example:
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();