2017-04-11 139 views
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上很好地工作(我没有太多的时间来现在写一个)。我需要一些指引来朝着正确的方向前进。

任何意见表示赞赏。谢谢。

编辑:我真的很想实现上面的东西使用共享内存,因为我需要以快速分享大量的数据,我需要调整性能。任何关于如何实现它的指针?

+0

我不知道c#或命名管道,但为什么不使用普通的TCP连接,只是管道数据? – Gntem

+1

我想共享的数据是二进制和大的,我不想要TCP头的开销。我需要一个轻量级解决方案 – alDiablo

回答

0

我想出了一种方法来按照我的要求在可写入的nodejs流中使用drain事件。