안녕하세요. 필그림입니다.
100메가 파일은 적당한 크기로 잘라서 전문(전문크기는 4kbyte 정도됩니다.)을 생성한 후에
서버쪽으로 쉬지 않고 전송하면 서버쪽에서 어느 정도 받다고 데이터를 받지 못합니다.
서버쪽 문제인줄 알았는데 클라이언트에서 데이터를 보내지 못하는 현상이 발생합니다.
흥미로운게 클라이언트에서 데이터를 모두 보내게 되면
한방에 서버로 전송이 되어 처리가 된다는 것입니다.
참고로 클라이언트에서 ctx.writeAndFlush 메소드를 이용해서 전송하였습니다.
그리고 400k 보내고 간단한 더미 메세지 주고 받고 다시 400k 보내는 식으로 하면
이런 현상은 발생하지 않습니다.
flush 메소드를 호출하게 하기 위해
idleStateHandler를 이용하여 readIdleEvent를 발생시켜 ctx.flush() 메소드를 호출하게 했는데
readeridleEvent가 발생하지 않고 한방에 서버로 전송이 된 후에 확 발생하게 되어 의도되로 처리되지 않더군요.
현재로는 적당한 크기의 데이터를 보내고 잠시 쉬거나(eventloop 안에서 sleep 하는 것은 추천하지 않아서 약간 주저되지만요)
적당한 크기의 데이터를 write하고 이후 하나의 메세지는 writeFlush하는 식으로 한번 시도해 보려고도 합니다.
어떻게 처리하는 게 좋을지 경험이나 가이드 부탁 드립니다.
(현재로는 더미메세지를 주고받고는 할 수는 없는 상태이고 순전히 보내는 쪽에서 문제없이 보내도록 해야 하는 상황입니다.)
감사합니다.