통신 종류 (전이중, 반이중, 단방향)

Jan 30, 2024
통신 종류 (전이중, 반이중, 단방향)

[ 통신도 종류가 있어요 ]

1. 전이중(양방향) Full Duplex

쌍방향 요청. 채팅 같은 것 (카톡) 친구한테 카톡을 보낼 때만 답장이 오나? 아니다! 내가 안보내도 친구가 카톡 보내잖아. 내가 보내고 있을 때도 친구가 카톡 보내고. 그게 바로 전이중(양방향) 통신! (+ 전화기)
안녕~ 하면서 메인 스레드로 메세지를 보내고 있는데 친구가 나한테 톡 보낼수도 있잖아!! 그니까 같이 읽으려면 보내는 스레드, 읽는 스레드 2개가 도는 것 (샌드스레드, 리시브스레드가 필요) 읽는 스레드(리시브 스레드)는 언제 오는지 모르니까 리스너처럼 계------속 도는것임. 샌드 스레드는 메시지를 보내는 동작이 필요한 시점에만 작동 (사용자가 특정 동작을 수행하거나 특정 조건이 충족될 때 메시지를 보내는 스레드가 작동)
 

 
[ 장점 ] 트리거가 없음. 답장 필수 x (요청과 응답이 자유로움)
[ 단점 ] 계--속 요청해야 하기 때문에 부하가 높다. while 틈 없이 엄청 돈다. 언제 말할지 모르니까 계속... 계속... 듣고 있는 것. 연결이 안 끊김...
💡
전이중(양방향)은 stateful 하다 = 상태가 꽉 차있다. (상태 = 요청자의 상태. 요청자의 상태를 다 기억해요’ 하는 것)
 

2. 반이중 Half Duplex

내가 뭔갈 보냈을때 상대방이 응답까지 해주는 것. 내가 뭔가를 요청했을 때만 상대가 응답 : 반이중 구조 (ai톡이나 웹(http), 무전기 같은게 반이중이다.)
[ 내가 1을 보내면 "안녕", 2를 보내면 욕을 해 ] 내가 bufferedwriter 하지? flush하지? 끝에 \n 하지? (readLine) 그러고 보내지? 상대방은 bufferedreader로 받겠지? 리드라인해서 읽겠지? 내용 까보니까 숫자 1이 적혀 있지? 무슨 반응을 보낼지 if문으로 받겠지? 애도 bufferedwriter로 하겠지? 안녕을 쓰겠지? flush하고 \n하지? 그럼 나도 bufferedreader로 받겠지? 리드라인 해서 읽겠지? 이렇게 버퍼가 나 2개, 상대 2개씩 총 4개가 달리는 구조 반이중 통신 : 일방적 나만 요청하고 응답하는 형태라서 '요청과 응답 형태' 라고도 함
http(웹)이 반이중을 쓴다. www.naver.com = bufferedwriter > 이 주소 요청한 걸 read로 읽음 > 그 페이지 html 코드를 응답 즉, naver.com은 가만히 있다가 내가 요청할 때만 데이터를 주잖아 요청시 응답하는거니, 반이중! * f5 = 재요청
 

 
[ 장점 ] 부하 x
동기적으로 실행하기에 스레드가 1개만 있으면 됨 트리거 있음. 보내고 응답. (요청에 대해 응답) 요청할 때만 반응함. 응답하면 할거 없음. 끝! 무전기같은 것.
💡
양방향으로 통신할 수는 있지만 동시에 통신할 수는 없다! (ex. 무전기처럼)
💡
반이중은 stateless 하다 = 상태가 없다. (상태 = 요청자의 상태 아무 것도 기억하지 못해요)
 

3. 단방향 simplex

보내는 사람 : writerbuffer 받는 사람 : readbuffer 딱 이것만 있는 것
 
Share article

codingb