I启动Node.js进程,然后稍后,我写入命名的管道。由于某些原因,似乎没有数据到达ON数据回调。 我正在写信给命名的管道:
mkfifo NAMEDPIPEIN
echo "foo bar baz" > NAMEDPIPEIN
另一个解决方案,来自
@@richardpringle应该起作用,但功能性限制。如果您尝试以这种方式打开多个FIFO(超过线程池中的线程数),那么您打开的第一个线程将不再流式传输数据。这是因为
net
模块!
Https://stackoverflow.com/a/52622722/1843507
当前从FIFO进行流式传输的方法正在使用插座:
const fs = require('fs');
const net = require('net');
fs.open('path/to/fifo/', fs.constants.O_RDONLY | fs.constants.O_NONBLOCK, (err, fd) => {
// Handle err
const pipe = new net.Socket({ fd });
// Now `pipe` is a stream that can be used for reading from the FIFO.
pipe.on('data', (data) => {
// process data ...
});
});
总而言之,如果您正在运行脚本,并且不介意将线程池中的一个线程绑定,则可以使用@RichardPringle的解决方案。否则,您绝对应该使用此解决方案。
this应该这样做:const fs = require('fs');
const path = require('path');
const fifoPath = path.resolve(projectRoot, '/NAMEDPIPEIN')
const fifo = fs.createReadStream(fifoPath);
fifo.on('data', data => {
// process data...
});
使用fifo.on('data', console.log)
@@user5047085'如果您一次写入命名的管道,它似乎在此之后停止工作'。 如果您使用o_rdwr打开管道(不是o_rdonly),它将继续工作。