node.js가 0.6.18> 및 0.8.0 인 UDP 연결에서 중요한 데이터 손실을 목격했습니다. 초당 약 1200 패킷의 높은 패킷 속도에서 프레임이 약 1500 바이트 제한으로 나타납니다. 각 데이터 패키지에는 증가하는 숫자가 있으므로 잃어버린 패키지 수를 추적하기 쉽습니다.node.js UDP 데이터가 높은 패키지 속도로 손실 됨
var server = dgram.createSocket("udp4");
server.on("message", function (message, rinfo) {
//~processData(message);
//~ writeData(message, null, 5000);
}).bind(10001);
수신 콜백에서 나는 두 개의 사례를 테스트하여 파일에 5000 개의 패키지를 저장했습니다. 결과 도자기가 떨어지지 않았습니다. 데이터 처리 루틴을 포함하고 약 50 % 드롭 율을 얻은 후에. 예상했던대로 프로세스 데이터 루틴은 완전히 비동기 적이어야하며 패키지에 바이너리 데이터를 처리하고 추가 처리 루틴에 이벤트를 방출하는 간단한 파서이기 때문에 시스템에 데드 타임을 발생 시켜서는 안됩니다.
파싱 루틴은 이벤트 처리기가 각 패킷을 처리 할 수없는 데드 타임을 초래하는 것으로 보입니다.
낮은 패키지 속도 (< 1200 패키지/초)에서 데이터 손실이 없습니다! 이 버그입니까 아니면 내가 잘못하고있는 것입니까?
감사의 마리우스! udp raw 소켓에 액세스하여 버퍼 길이를 늘릴 방법이 없습니다. – python357
@koleto @koleto https://github.com/lloyd/node-compute-cluster를 사용하여 CPU 집약적 인 작업을 메인 이벤트 루프에서 쉽게 내릴 수 있습니다. – penartur
@penartur 사용할 수 있습니까? EventEmitter가 마스터와 작업자간에 메시지를 전달합니까? – python357