1
我正在使用命名管道在Windows中的两个进程之间共享一些数据。一个是节点进程,另一个是C#进程。这里是一个代码示例我在节点过程中使用:在节点js中的Windows命名管道(首选共享内存)
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');
})
我使用NamedPipeClientStream在C#中读取数据。我在两边进行循环操作,比如我的节点进程是生产者,C#进程是消费者。
这工作正常。
但是有时C#循环会挂起,并且在我的节点进程中,我想覆盖旧数据上的新数据。我想知道是否可以在我的管道(我在nodejs中创建的那个)中指定一些最大大小或数据超时,但在标准文档中找不到这些内容。
如果无法通过这种方式来解决,有共享内存路径来解决这个问题,但我找不到任何稳定的共享内存库的nodejs在windows上很好地工作(我没有太多的时间来现在写一个)。我需要一些指引来朝着正确的方向前进。
任何意见表示赞赏。谢谢。
编辑:我真的很想实现上面的东西使用共享内存,因为我需要以快速分享大量的数据,我需要调整性能。任何关于如何实现它的指针?
我不知道c#或命名管道,但为什么不使用普通的TCP连接,只是管道数据? – Gntem
我想共享的数据是二进制和大的,我不想要TCP头的开销。我需要一个轻量级解决方案 – alDiablo