마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

채팅 구현할때 통신에 대해 여쭤봅니다.

0 추천
안녕하세요.(_ _)

안드로이드와 관련된건 어느정도 대부분 사용할줄 아는 학생입니다.

다만 서버,통신쪽은 초보나 다름이 없어 질문드립니다.

일단 구현하고 싶은 채팅은 1:1 , 1:N 모두 가능한 채팅입니다.

소켓통신의 장점은 알거같습니다. 다만 제가 이해안되는 부분이 있어 질문드립니다.

1. 하루에 한통 주고받는 채팅에 소켓을 계속 열어두면 서버측면에서 비효율적이지 않나요?

2. 소켓통신말고 한통 보낼때마다 메세지를 받는사람들에게 push를 보내준다면

한통한통 모든 메세지 마다 push를 보내니 이것도 문제가 될거같습니다.

 

좋은 방향 없을까요? 큰 규모의 좋은 채팅어플(카카오톡같은)들은 어떻게 구현되어 있는지..

이해좀 도와주시면 너무 감사드리겠습니다.
김원장91 (1,470 포인트) 님이 2018년 2월 13일 질문

1개의 답변

+1 추천
 
채택된 답변

1. 하루에 한통 주고받는 채팅에 소켓을 계속 열어두면 서버측면에서 비효율적이지 않나요?

-  계속 열어두는 경우는 극히 드뭅니다. 보통은 connetion pool을 만들어두고, 연결 요청시 bind 해서 사용하는 방식이며 session등을 발급해서, 처리하기도 합니다.

2. 소켓통신말고 한통 보낼때마다 메세지를 받는사람들에게 push를 보내준다면,
한통한통 모든 메세지 마다 push를 보내니 이것도 문제가 될거같습니다. 

- 그래서 옵져버 패턴을 쓰기도 합니다. 일정 주기로 서버에 데이터가 변경되어있는지 물어서 변경시에만 데이터를 받는 방식입니다.

익명사용자 님이 2018년 2월 14일 답변
김원장91님이 2018년 2월 14일 채택됨
너무 감사합니다. 많이 도움받았습니다.
하나 더 여쭤봐도될까요.
일정주기마다 서버에 확인해보란 말씀이신거같은데
주기가 꽤 길다면 오는 메세지들은 실시간으론 확인이 안되는건가요?
아니면 새로온 첫메세지만 push로 받는건가요?
아직 너무 어렵네요..ㅜㅜ
구현 나름 입니다. 데이터가 있을때는 짦은 시간에 물어보고, 없을때는, 긴 시간 주기로 물어보기도 하고 긴급 공지 같은건 push 방식으로 내려주기도 합니다.
...