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');
})
저는 C#에서 NamedPipeClientStream을 사용하여 데이터를 읽습니다. 내 노드 프로세스는 생산자이고 C# 프로세스는 소비자입니다.
잘 작동합니다.
가끔 C# 루프가 멈추고 그 시점에서 내 노드 프로세스에서 이전 데이터 위에 새 데이터를 덮어 쓰려고합니다. 내 파이프 (nodejs에서 생성 한 것) 나 데이터에 대한 타임 아웃에서 최대 크기를 지정할 수 있지만 표준 문서에서는 찾을 수없는 것인지 궁금합니다.
이 방법으로 해결할 수 없다면 문제를 해결하기위한 공유 메모리 경로가 있지만 Windows에서 잘 작동하는 nodejs에 대한 안정적인 공유 메모리 라이브러리를 찾을 수 없습니다. 지금 당장 쓰십시오). 나는 올바른 방향으로 움직이기위한 몇 가지 조언이 필요하다.
모든 조언을 주시면 감사하겠습니다. 감사.
편집 : 빠른 속도로 많은 양의 데이터를 공유해야하기 때문에 공유 메모리를 사용하여 위의 내용을 구현하고 싶습니다. 성능을 조정해야합니다. 그것을 구현하는 방법에 대한 모든 포인터?
나는 C# 또는 명명 된 파이프에 대한 지식이 없지만 일반 TCP 연결을 사용하지 않고 데이터를 파이프하는 이유는 무엇입니까? – Gntem
공유하고자하는 데이터는 바이너리이며 크기가 커서 TCP 헤더의 오버 헤드를 원하지 않습니다. 가벼운 솔루션이 필요합니다. – alDiablo