c2dm으로 구현해도 되겠지만.......
2.1에서도 돌아가야 한다는 명령(?)을 받고 좌절하던 찰나
mqtt라는걸 접하게 되었는데요...
아시다시피 이게 문서가 다 영어라서..
이해하는데 많은 어려움이 있어요 ㅠㅠ
일단 클라이언트 쪽은 어찌어찌 구현해 놨는데
서버쪽이 문제입니다...ㅠㅠ
저는 jsp같은거 만져본 적도 없구요..
(공부할 생각은 있습니다.)
이게 클라이언트만 구현하면 되는건지 서버단에서도
뭔가 mqtt관련해서 해줘야되는게 있는지 궁금하네요.
많은 고수분들의 답변 기다리겠습니다 (__)
몇가지 단말쪽 개발에 중요하게 염두에 둬야 하는 점이 있습니다.
1. 네트워크가 막 끊긴다.
- 아마 저 링크 따라가셔서 받은 소스에 어느정도 대비는 되어있는데요. 그걸로 충분하지 않습니다.
2. 접속시 서비스 응답시간의 문제
- 이게 잴 골때리는데요... startService는 이를 호출한 스레드에서 실행됩니다.
background 서비스라고 할지라도 startService를 통해서 인텐트를 받아서 호출이 되면 UI스레드에서 실행 될수 있다는 말입니다.
- 덕분에 초기실행때 10초 넘게 걸리는 경우가 생깁니다.
3. broker 서버는 어떤걸 쓰시나요?
1,2번 두개를 한번에 해결할만한 방법으로 저는 이벤트 큐를 만들었죠...
이벤트를 큐에 쌓고 큐를 비우는 무한루프를 AsyncTask로 돌렸습니다.
그리고 대체로 "단말의 절전 정책 / 네트웍 정책"때문에 불안정해지는 경우가 많습니다.
또한 저기 저 링크타고 들어간 소스에서 사용하는 ANDROID_ID라는 상수는 단말의 ID를 가져오는데요...
삼성 단말들은 다 똑같이 올라옵니다. 나중에 펌업으로 고쳐졌는지 모르지만..
버전에 다 맞추려면 결국 못쓰겠죠?
Client ID를 어떻게 만들어서 배포할것이며, 유일성을 어떻게 유지할 것인가도 고민하셔야 합니다.
답변 감사합니다.
일단 지금 서버 자체가 불안정해서 1번과 같은 문제가 너무 자주 발생합니다..
이건 서버단에서 우선 해보고 안되면 앱에서 처리를 더 해줘야 할거같네요..
진짜 2번이 젤 골때리네요... 그거때매 가끔씩 ANR이 발생합니다.... 분명히 스레드로 빼줬는데도 그러니 좀 의아했어요..
3번은... 기존에 웹 페이지가 한 7개정도 돌아가는 서버를 사용하고
여기에 연동되는 웹이랑 같은 서버를 사용하고 있습니다.. 물론 푸시서버 따로 만들어야 하는건 알지만 상황이 여의치 않네요..
윈도우 2000서버입니다.
그리고 Client ID의 경우에는 이미 방법을 찾아서 잘 사용하고 있습니다...^^
답변 감사합니다.
저도 저거 할때 서버 문제라고 생각했던 것들이 좀 있었는데요... 알고보면 거의 단말쪽입니다.
서버는 거의 건들지 않았습니다.
2번의 경우 큐에다가 메시지만 넣고 빠져나가는 식으로 해야 됩니다. service의 응답시간을 보장하는거죠....
자꾸 스레드를 생성하는것도 관리가 힘들구요.... 크게 하나 무한루프 돌려버리면 잴 깔끔합니다.
테스트를 얼마나 큰 규모로 하는지 알수 없으나...
앵간한 규모 (클라이언트 100대 200대 정도)에서는 저렇게 하셔도 충분히 테스트 가능합니다.
제가 중요하게 생각하는것은 broker 소프트웨어가 어디서 나온거고, 버전이 얼마냐는 겁니다.




저는 tokudu 라는 android push를 보고 많이 배웠는데요.
클라이언트단도 있어야 하지만, 클라이언트단의 통신을 가능하게 해 줄 서버가 필요하구요,
그 서버에는 서버와 mqtt를 이어주는 brocker라는 녀석도 필요합니다.
tokudu를 보시면, jsp가 아닌 php로 구현이 가능하도록 되어있습니다.
http://tokudu.com/2010/how-to-implement-push-notifications-for-android/
도움이 되었으면 좋겠네요.
Good luck to you!