2012-06-28 2 views
2

node.js의 다음 코드는 괄호 안에 들어오는 모든 데이터를 기록하지 않고 데이터를 청크로 나눕니다. 예를 들어 들어오는 데이터가 ABCDEF ... XYZ 인 경우 [ABCDEF ... XYZ]가 아닌 [ABC] [DEF] ... [XYZ]로 데이터를 기록합니다. 데이터는 물론 훨씬 더 큽니다. 알파벳은 단지 예일뿐입니다.node.js가 들어오는 데이터를 청크로 나누는 이유는 무엇입니까?

들어오는 모든 데이터가 괄호 안에 한 번 기록되고 부분이 기록되지 않도록하려면 어떻게 써야합니까?

chatServer.on('connection', function(client) 
{ 
    client.on('data', function(data) 
    { 
     console.log('[' + data.toString() + ']'); 
    })  
}) 

답변

8

음 데이터 패킷에 도착, 그래서 (이 경우) 당신은 당신이 함수 외부 정의 변수로 패킷을 연결해야합니다.

buffer = ''; 

chatServer.on('connection', function(client) 
{ 
    client.on('data', function(data) 
    { 
     buffer += data.toString(); 
    })  
}); 

console.log('[' + buffer + ']'); 
+0

감사합니다! 이것은 트릭을했다. – Hahnemann

+1

그러면 청크는 도착하는 TCP 패킷에 해당합니까? – Zaz

+0

@Zaz 아니요. 모두 'highwaterMark'값에 의존합니다.이 값은 스트림 생성자에 전달할 수 있습니다. 자세한 내용은 https://nodejs.org/api/stream.html#stream_buffering –

4

matthewdavidson과 마찬가지로 전체 메시지가 아닌 모든 "청크"에 가입합니다. 함수 내에서 클로저의 데이터를 캡처하고 비동기 적으로 응답하려는 경우가 더 많습니다. 다음을 시도해보십시오

chatServer.on('connection', function(client) 
{ 
    var buffer = ''; 

    client.on('data', function(data) 
    { 
     buffer += data; 
    }) 

    client.on('end', function(){ 
     console.log('[' + buffer + ']'); 
    }) 
}); 

체크 아웃 http://www.nodebeginner.org/#handling-post-requests을 자세한 내용은

+0

하지만 client.on ('end', function() {...}) 클라이언트가 연결을 끊을 때만 호출됩니까? 버퍼의 끝을 결정하는 이유는 JSON.parse를 완전한 문자열로 호출 할 수 있기 때문입니다. – Hahnemann

+0

아하, 이제 내가 사용하는 모듈을 찾았습니다. [http://nodejs.org/api/net.html] 클라이언트 모양은 어떻습니까? 대기열을 완료 할 때 연결을 닫습니까? 데이터 세트를 계속 전송하고 각 세트의 시작/끝을 인식해야합니까? – vossad01

+0

두 번째 것. 클라이언트는 입력으로서, 출력 스트림은 노드와 데이터를 송수신합니다. 사용자에 의해 종료됩니다. – Hahnemann

관련 문제