안녕하세요...
c2dm을 구현할려고 하는데 동작흐름이 잘 리해가 않가네요...
c2dm을 구현하면 어떻게 서버로 부터 메세지를 받는가요?
이것도 소켓을 리용하는가요?
그리고 주기적으로 서버에 요청을 보내 자기한테 온 메세지가 있는가를 보는가요 아니면 서버에서 내려보내주나요?
서버에서 내려보내준다면 소켓을 계속 연결하고 있나요?
동작 흐름에대하여 설명해주시면 감사하겠습니다..
꼭 답변 부탁드립니다....
빨리 체크하여야할 사항이여서 그럽니다...
그럼 좋은 하루 되세요....
1.
"푸쉬서비스 동작도 소켓으로 말단이 푸쉬서버와 연결하고있나요?"
->이렇게 물어보셨는데 제가 이해한 바로는 푸쉬서버의 동작을 물으신것같습니다.
먼저 제가 이해한바로는 c2dm의 경우 1024바이트정도의 메시지만 전달가능한것으로 알고있습니다.
그리고 제가 참고사항으로 올린 사이트에 그림을 보시면 third parth server에 변경사항이 있을시에 구글이 자체적으로 제공하는 c2dm에 메시지를 전달하고 해당디바이스로 보내는 것 이지요.
소켓으로 연결되있냐고 물어보셨는데 c2dm과 디바이스간에 통신을 소켓으로 하고있는지는 정확히 잘 모르겠습니다.
제 생각엔 푸쉬서비스의 경우 3g망을 쓰기때문에 소켓통신이 여기서도 적용되는지 모르겠네요.
다만 백그라운드로 킵얼라이브를 하고있는것으로 알고있습니다.
2.
"제가만든서버에 소켓으로 연결되여있다가 서버에서 직접 내려보내주는 식으로 구현을 하려고 합니다."
->이 부분은 사용자 디바이스가 계속해서 데이터server를 체킹해야하는 방식이므로 폴링방식입니다.
푸쉬서비스를 쓰지않고 두 디바이스간의 데이터전송을 실행하려면 해당 데이터서버에 접근을 해서 확인을 해야하는 작업을해야합니다.
(이때 사용자는 자신에게 데이터가 왔는지 안왔는지 모릅니다. 그저 서버에접근하여 확인하는것이죠(이게폴링방식))
그러나 푸쉬서비스의 경우 "폴링"처럼 "해당디바이스가 서버에접근한다" 라는 개념이아니라
"서버에 변경사항이 있으면 디바이스에게 통보한다" 라는 의미입니다. 따라서 폴링처럼 자주접근을 하는것이 아니라 더 효율적으로 알고있습니다.
친절한 답변에 감사드립니다..
1. 에서 "다만 백그라운드로 킵얼라이브를 하고있는것으로 알고있습니다." 라고 말씀하셨는데 여기서 킵얼라이브를 보내는것은 폴링처럼 계속 서버에 접근하는것이나 마찬가지가 아닌가요?(물론 이것이 c2dm에서 소켓을 쓰는지 그어떤 다른방식을 쓰는지에따라 달라 지긴 합니다.)
제가 서버를 만드는것도 말단이 킵얼라이브를 일정한 간격으로 올려보내고 서버에서 변경사항이 있을때마다 말단에 내려 보내줄려고 합니다.
제가 삐뚤어진 생각을 하고 있다면 바로잡아주세요...
감사합니다....




최근 졸작으로 카카오톡과 같은 메세지 서비스를 구현하고 있어서 주제가 친숙하네요~ㅎ
제가 이해한 바로는 c2dm은 푸쉬서비스이고 여기에 개발자가 등록을 하고 해당 device의 regid도 등록하면
푸쉬메세지가 오는걸로 알고있습니다.
메세지 확인을 위해서는 소켓통신을 하던 다른통신을 하던가 해서 해당 서버에 접근해서 자신에게 온 메세지나 이미지등을 가져와야하구요.
"주기적으로 서버에 요청을 보내 자기한테 온 메세지가 있는지를 확인한다"는 방식은 풀링방식인데
이것은 비효율적이고 이러한것을 보완하기위해 푸쉬서비스를 이용하는 것이지요.
동작원리를 이해할수 있는 좋은 사이트가 있어서 링크올립니다.
http://aldehyde7.tistory.com/155
보시면 쉽게 이해되시겠지만 동작원리는 간단히 다음과같습니다.
device 2개 : A , B
server 2개 :메시지저장 server DB, 푸쉬서버(c2dm)
A가 메세지를 보냄->메시지 저장 serverDB에 메시지와 보낸이와 받는이의 regid저장->이 서버에서 푸쉬서버로 전달
->푸쉬서버에서 B로 푸쉬메시지전달 ->B가 푸쉬메시지 "확인"버튼을 클릭하면 그때 메시지데이터저장 serverDB에 접근
->자신에게 온메시지가 있으면 갖고옴. ->끝