35

node.jsで名前付きパイプを作成するには?

PS: 今のところ、次のように名前付きパイプを作成しています。しかし、これは最善の方法ではないと思います

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);
    }
});
4

3 に答える 3

40

Windows での名前付きパイプの操作

ノード 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');
})

出力:

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

パイプ名に関する注意:

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

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

どちらもファイル ハンドルを使用します。
\Device\NamedPipe\PIPENAME

于 2015-08-23T22:23:40.707 に答える
33

名前パイプは Node コアではサポートされておらず、今後もサポートされないようです - Ben Noordhuis 10/11/11 より:

Windowsには名前付きパイプの概念がありますが、あなたが言及したので、mkfifoUNIX FIFOを意味すると思います。

私たちはそれらをサポートしておらず、おそらく今後もサポートしません (ノンブロッキング モードの FIFO はイベント ループをデッドロックする可能性があります) が、同様の機能が必要な場合は UNIX ソケットを使用できます。

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

名前付きパイプとソケットは非常に似ていますが、モジュールは aとではなくneta を指定してローカル ソケットを実装します。pathhostport

例:

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();
于 2013-08-14T08:20:40.633 に答える
-1

fs.watchFile名前付きパイプの代わりに使用できますか?ドキュメントを見る

于 2012-08-01T11:47:03.330 に答える