소켓통신 질문좀요

minsktown의 이미지

소켓통신 모델중에
클라는 비동기 서버는 동기
클라는 동기 서버는 비동기 뭐 이런식으로 서로 다른 방식으로 통신을 하는 경우가 있나요?
있으면 언제 저런방식을 사용하는지 알고 싶습니다.
쉬운 예가있으면 들어주셔도 되고요 ㅎㅎ;

요즘 비동기 방식 공부중인데..
물론 코딩도 어렵지만 이걸 언제 어떻게 왜 사용해야되는지를 구분하는게 더 어려운것 같습니다

emptynote의 이미지

부족한 지식 과장되게 설명하겠습니다.

===>>> 잘못된 내용을 사실처럼 말할 수 있으니 주의하시기 바랍니다. <<<=====

동기 방식으로 동작하는 소켓의 기본 동작은 하나의 쓰레드(?)에서 "가" 라는 메시지를 보내고 그 응답 메시지 "응답-가" 를 받을때까지 기다리는 방식입니다.

반면 비동기 방식으로 동작하는 소켓의 기본 동작은 메시지를 보내는 곳(=쓰레드?)과 응답 메시지를 받는곳(=쓰레드?)가 다르기에 메시지를 보내는것과 받는것이 별개로 동작됩니다.

저두 최근(?)에 파일 송수신하는 비동기 서버와 비동기/동기 클라이언트를 구현해서 파일 업로드/다운로드를 직접 수행해 봤는데요.

비동기식 장점은

동기식은 현재 파일 조각을 잘 받았다는 수신을 받은후에야 다음 파일 조각을 보내게 됩니다.

반면에 비동기식은 그냥 쭉 보내면 됩니다. 따라서 대용량 파일을 아주 잘게 쪼개서 보낼 수록 전체 수행 시간 차이는 많이 벌어집니다.

2-3Gbyte 파일 1개를 대략 4kbyte 로 쪼개서 보낼경우 그 차이를 분명히 알 수 있었습니다.

다만 쪼개는 크기를 30~40Kbyte 로 보낼 경우 정확한 이유를 모르겠지만 체감을 느낄정도로 차이가 나지 않았습니다.

비동기식 단점으로는 에러 제어가 어렵다는 점입니다.

혹시 자바라는 언어를 아시면 제가 만든 프로그램에서 이것을 보여드릴 수 있는데요.

관심 있으시면 댓글로 남겨주세요.

minsktown의 이미지

혹시 지금이라도 말씀하신 프로그램을 좀 볼수 있을까요? ㅎㅎ;

안년ㅇ