Windows node js中的命名管道(首选共享内存)
Windows named pipe in node js (preferred shared memory)
我正在使用命名管道在 windows 中的 2 个进程之间共享一些数据。一个是节点进程,另一个是 C# 进程。这是我在我的节点进程中使用的代码示例:
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');
})
我在 c# 中使用 NamedPipeClientStream 来读取数据。我在两侧循环执行此操作,例如我的节点进程是生产者而 C# 进程是消费者。
这很好用。
但有时 C# 循环会挂起,此时在我的节点进程中我想用新数据覆盖旧数据。我想知道我是否可以在我的管道(我在 nodejs 中创建的管道)或数据超时中指定一些最大大小,但在标准文档中找不到这样的东西。
如果不能通过这种方式解决,有一个共享内存路径可以解决问题,但我找不到任何稳定的 nodejs 共享内存库,它在 windows 上运行良好(我不知道现在没有太多时间写一篇)。我需要一些指示才能朝着正确的方向前进。
如有任何建议,我们将不胜感激。谢谢
编辑:我真的很想使用共享内存实现上述内容,因为我需要快速共享大量数据并且我需要调整性能。关于如何实施它的任何指示?
我想出了一种方法来根据我的要求在 nodejs 的可写流中使用 drain 事件。
我正在使用命名管道在 windows 中的 2 个进程之间共享一些数据。一个是节点进程,另一个是 C# 进程。这是我在我的节点进程中使用的代码示例:
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');
})
我在 c# 中使用 NamedPipeClientStream 来读取数据。我在两侧循环执行此操作,例如我的节点进程是生产者而 C# 进程是消费者。
这很好用。
但有时 C# 循环会挂起,此时在我的节点进程中我想用新数据覆盖旧数据。我想知道我是否可以在我的管道(我在 nodejs 中创建的管道)或数据超时中指定一些最大大小,但在标准文档中找不到这样的东西。
如果不能通过这种方式解决,有一个共享内存路径可以解决问题,但我找不到任何稳定的 nodejs 共享内存库,它在 windows 上运行良好(我不知道现在没有太多时间写一篇)。我需要一些指示才能朝着正确的方向前进。
如有任何建议,我们将不胜感激。谢谢
编辑:我真的很想使用共享内存实现上述内容,因为我需要快速共享大量数据并且我需要调整性能。关于如何实施它的任何指示?
我想出了一种方法来根据我的要求在 nodejs 的可写流中使用 drain 事件。