2017-04-11 1 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'); 
}) 

저는 C#에서 NamedPipeClientStream을 사용하여 데이터를 읽습니다. 내 노드 프로세스는 생산자이고 C# 프로세스는 소비자입니다.

잘 작동합니다.

가끔 C# 루프가 멈추고 그 시점에서 내 노드 프로세스에서 이전 데이터 위에 새 데이터를 덮어 쓰려고합니다. 내 파이프 (nodejs에서 생성 한 것) 나 데이터에 대한 타임 아웃에서 최대 크기를 지정할 수 있지만 표준 문서에서는 찾을 수없는 것인지 궁금합니다.

이 방법으로 해결할 수 없다면 문제를 해결하기위한 공유 메모리 경로가 있지만 Windows에서 잘 작동하는 nodejs에 대한 안정적인 공유 메모리 라이브러리를 찾을 수 없습니다. 지금 당장 쓰십시오). 나는 올바른 방향으로 움직이기위한 몇 가지 조언이 필요하다.

모든 조언을 주시면 감사하겠습니다. 감사.

편집 : 빠른 속도로 많은 양의 데이터를 공유해야하기 때문에 공유 메모리를 사용하여 위의 내용을 구현하고 싶습니다. 성능을 조정해야합니다. 그것을 구현하는 방법에 대한 모든 포인터?

+0

나는 C# 또는 명명 된 파이프에 대한 지식이 없지만 일반 TCP 연결을 사용하지 않고 데이터를 파이프하는 이유는 무엇입니까? – Gntem

+1

공유하고자하는 데이터는 바이너리이며 크기가 커서 TCP 헤더의 오버 헤드를 원하지 않습니다. 가벼운 솔루션이 필요합니다. – alDiablo

답변

0

필자의 요구 사항에 따라 쓰기 가능한 nodej 스트림에서 드레인 이벤트를 사용하는 방법을 알아 냈습니다.