카톡, 라인같은 메신저 질문좀 하자
씹장인만 답변 해주셈


대충 자바로 서버 프로그램 만들고 가동(기동전사 건담 아니다)했다고 치고
GCM같은거에 푸시서비스 등록했다고 하자.

그럼 클라1이 클라2에게 메시지를 보내게 되면

1. 클라1은 메시지를 보내려고 한거니까
당연히 앱을 실행했을테고 그렇다는것은
클라1의 앱에서는 이미 server랑 tcp 커넥션이 연결됬다는것임
그래서 결국 server에 메시지를 바이트로 바꿔서 보내게된다.

2. 자바 서버에서는 그 메시지를 내가 정한 프로토콜 규정대로 바이트로 대충 읽어버리겠지
그래서 누가 누구한테(혹은 어떤 채팅방 정보) 어떤 말을 썻는지 다 까보겠지

그래서 그거 깐거를 다시 푸시서비스의 주소(?) 하여간
푸시서비스 이용해가지고 얻은 그 정보가 있겠지
거기로 다시 메시지를 보내버려

3. 푸시 시스템에서는 그거 받은거를 대상의 특정 키같은게 있겠지 그거 유추(여자친구 유주 아니다)해서 클라2한테 뭐 어떤식으로든 신호(드라마 시그널 아니다)를 주게 만들어

4. 클라2의 메신저 앱에는 푸시 시스템이 매니페스트(?) 같은곳? 아니면 서비스같은거로 등록이 되어있겠지
그럼 당연히 클라2의 데이터가 켜있으면 뭐 이벤트감지?
하여간 그런거로 푸시시스템에서 보낸걸 인식해서
거기서 그 메신저 앱의 특정 액티비티로 브로드캐스트 해서
자동으로 그 액티비티의 함수는 켜지게 되고
그 함수에서 앱이 켜져있으면 바로 뿌려주기
안켜져있으면 노티피로 갈겨버리기

5~7은 클라2에서 클라1로 답장한건데 위랑 같겠지

구글링(저글링 ㄴㄴ) 쫌 해보니 그림이 내가 올린거 죄다 저거더라고

내가 이해한게 이건데 이게 정확히 맞냐?

푸시시스템은 안써도 되는데 쓰는 이유는 tcp계속 연결해서 백그(하얀 백구 ㄴㄴ해)하거나 서비스하면 배터리 씹창나서 그런거지?



그럼 pc카톡의 경우는 pc니까 배터리 따위 노상관이잖아.

그럼 클라1에서 클라2로 메시지를 보낼때


서버에서는 메시지를 받은 상태가 될텐데 여기서

클라2가 pc로 로그인한 상태고 폰도 있다고 가정 (가정통신문 아님)

그래서 클라1의 메시지가 서버로 오게되서

서버에서는 그 대상이 되는 클라2의 정보를 캐내서
그 유저의 아이디가 pc로 로그인된지 보고 로그인됬으면 거기다 tcp 연결된거에 다이렉트도 다시 메시지 쏴주고

그리고 메신저용은 그대로 푸시시스템으로 정보 보내고

이거 맞음?