안녕하세요.
어플을 구현해서 혀냊 대략 만건 이상의 푸쉬를 정오에 한번에 날리는데요.
앞에 가입했던 아이디는 잘오는데 뒤에 새로 가입한 아이디가 안오길래
DB에 플래그를 넣고 테스트를 해봤는데 푸쉬가 재대로 안가는거 같네요.
만명중에 100명쯤 갔고 다시 돌리니까 1000명쯤 가고 다시 또 돌리니까 500명쯤 가고
일단 시간이 너무 오래 걸리면서 하나씩 가다가 죽는건지 하는거 같은데
하나 하나 가는데 시간이 긴건가요?
그리고 숫자 제한이 있는건가여?
어떻게 해결할 수 있는 방법이 없을까요? (푸쉬를 나눠서보낸다거나)
몇천개로 테스트 해보고 싶은데 일반 사용자들 Ids까지 넣고 테스트 할수는 없는 노릇이고
가지고 있는 폰 4개로 테스트하면 누르면 4개에 바로 바로 와서 =-= 재대로 된 테스트도 못하겟네요.
혹시 한건씩 나눠서 보내나요?
퐁퐁님 말대로 1000건 이상의 경우 에러를 리턴합니다.
1000건씩 묶어서 보내시구요.
DB의 플래그는 어떤 방식으로 구현한건지 모르겠지만, 푸쉬가 갔다고 하더라도 푸쉬 받은 폰이 그 순간에 서버에 접속할 여건이 안되서 누락될수도 있으니 너무 신뢰하지 마세요.(연결 실패시 재시도하면 모르겠지만요.)
일 푸쉬가 만건이 넘을정도면 상당히 규모가 있는 어플인가 봐요 ㅎㅎ
for 문을 돌리시면 한건씩 보내는거랑 차이가 없구요.
public MulticastResult send (Message message, List<String> regIds, int retries)
해당 메소드로 보내시구요. 자세한 코드는 GCM 공식 Demo를 체크아웃하셔서
Server 코드에서 Send Servlet쪽을 확인해 보세요.
거기에 1000건씩 잘라서 보내는 코드도 들어있습니다.
한가지만 더 여쭙고 싶습니다 ^^;
제가 이렇게 따로 따로 하나씩 푸쉬를 보내고 for문을 돌린 이유가 보낸 이유가 message가 사용자 마다 다 다르게 보내집니다.
그래서 그렇게 만들어 놓은거였는게 이거 때문에 과부하를 못 견디고 죽은거 같은 생각이...
읽어 보니까
{ "data": { "score": "5x1", "time": "15:10" }, "registration_ids": ["4", "8", "15", "16", "23", "42"] }
JSON 을 이런 형태로 만드는데
$arr = array();
$arr['data'] = array();
$arr['data']['type'] = toUTF8($type);
$arr['data']['msg'] = toUTF8($msg);
$arr['registration_ids'] = array();
$arr['registration_ids'][0] = $ids;
이런식으로 하나 씩 보냈습니다 .
$arr['registration_ids'][0] = $ids; -> $arr['registration_ids']= $ids;
로 바꾸면 $ids 배열을 넣으면 여러 사람에게 1000개 쏘는거 한꺼번에 되니까 될거 같은데
이때 1000명에게 다 다른 메세지를 보내야 하는데 어떻게 처리를 해야 할지를 모르겠습니다.
혹시 하나씩 푸쉬 보내는 방법 외에 1000개씩 묶어서 보낼때 각각의 메세지를 다르게 나오게 할 수 있는 방법이 없을까요?
GCM 레퍼런스 읽어보시면
요청 한번에 최대 1000건까지만 보낼 수 있습니다.
클라이언트에서 직접 보내진 않으실 테니
서버단에서 반복문 돌리셔서
수신자 아이디 넣는 부분에다가 한 번에 1000개씩만 넣어서 보내도록 처리하시면 됩니다.