Netty를 이용하여 파일 전송 기능을 구현해보려고 하는데요.
Netty의 샘플 코드를 보니까, 웹 서버 측에서 대용량 파일을 스트리밍을 해주는 기능이 구현되어 있어서 살펴보니.
"ChunkedWriteHandler"를 이용하여 chunk로 나누어서 데이터를 클라이언트에게 뿌려주고 있습니다.
제 질문은:
만약, 서버에서 클라이언트로 스트리밍되고 있는 데이터를 클라이언트 측에서 파일로 저장 ( chunk단위로 읽어서 append하
는) 하려면 어떤식으로 구현해야 할까요? ChunkedWriterHandler를 확장해야 하는 건가요?
구현방식과 샘플 코드를 알려주시면 감사하겠습니다.
건강한 하루 되세요!
클라이언트 측에서는 단순히 받은 ChannelBuffer 의 내용을 디스크에 써 주기
만 하면 됩니다. 다음 메소드 중 하나를 이용하면 버퍼의 내용을 손쉽게 디
스크에 쓸 수 있습니다:
ChannelBuffer.getBytes(int, OutputStream, int);
ChannelBuffer.getBytes(int, GatheringByteChannel, int);
ChannelBuffer.readBytes(OutputStream, int);
ChannelBuffer.readBytes(GatheringByteChannel, int);
이희승 드림
--
what we call human nature in actuality is human habit
http://gleamynode.net/
그럼, Client측에서는 PipelineFactory를 아래와 같이 구성한 후,
아래 FileWriteHandler(신규 클래스)에서 가이드해주신 API (ChannelBuffer.readByte
(OutputStrem, int))를 이용하여 파일 쓰기 기능을 구현하면 되는 건가요?
즉, HttpClientHandler(신규 클래스)는 서버가 보내주는 HttpResponse를 decode하여 Empty
File을 만들고,
이후 수신되는 파일 스트림은 FileWriteHandler가 받아서 생성된 File에 Append 처리하도록 설계하면 될까
요?
Netty 기반으로 이러한 Application을 만들 때, Best Practice가 어떤 것인지 정말 궁금합니다.
(제가, 간단하게 테스트 코드를 짜보니, 메시지가 도착할 때마다, 파일을 Overwrite하여, 종국에는 맨 마지막에 받은 데
이
터만 파일에 남는 현상이 생겼답니다.
이런 건 어떻게 해야할까요, FileOutputStream을 생성할 때, append 옵션을 줘야할까요?)
답변 기다리겠습니다.
그럼 행복한 주말 되시구요!! :)
public class HttpClientPipelineFactory implements
ChannelPipelineFactory {
public ChannelPipeline getPipeline() throws Exception {
// Create a default pipeline implementation.
ChannelPipeline pipeline = pipeline();
pipeline.addLast("decoder", new HttpRequestEncoder());
pipeline.addLast("encoder", new HttpResponseDecoder());
pipeline.addLast("handler", new HttpClientHandler());
pipeline.addLast("chunkedWriter", new FileWriteHandler());
==>
(?)
return pipeline;
}
}
On 1월14일, 오전10시56분, "Trustin Lee (이희승)" <trus...@gmail.com> wrote:
> 안녕하세요,
>
> signature.asc
> < 1K보기다운로드
> what we call human nature in actuality is human habithttp://gleamynode.net/- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -