푸시서버 개발시 GCM과 APNS 에서

1,664 views
Skip to first unread message

동준금

unread,
Aug 24, 2015, 11:35:35 PM8/24/15
to Korea Spring User Group Q&A

안녕하세요. 현재 자체 푸시서버를 구현중에 있습니다.

푸시를 받아 기기별로 GCM 이나 APNS 서버로 전달하는 중간 서버입니다.


현재 구현은 Spring 으로 구현하였으며,

GCM 은 com.ganyo.gcm-server

APNS 는 com.github.fernandospr.javapns-jdk16

라이브러리를 사용하고 있습니다.


여기서 질문입니다.

현재 푸시를 발송할때 토큰값을 100개를 List 에 담아서 이를 GCM 이나 APNS 서버로 전송하는 방식으로 개발하였습니다. 그런데 위에 제공하는 라이브러리에 pushToken 은 List 형태로 받아 전송하게 되어 있는데, badge의 경우 List가 아닌 int 로만 되어 있습니다. 

gcm-server 라이브러리는 Sender.send(Message message, List<String> regIds, int retries) / message 부분,

javapns-jdk16 라이브러리는 

Push.payload(Payload payload, Object keystore, String password, boolean production, Object devices) payload 부분)

List 를 for 문으로 돌려서 개별로 푸시를 발송해도 상관없으나, APNS 에 개별로 푸시를 여러개 발송할 경우, 오랜시간 걸려 푸시가 발송되는 현상이 있습니다.


푸시서버 자체 개발하신 분들은 푸시를 어떤 로직으로 GCM과 APNS로 발송하는지 알려주시면 감사하겠습니다.

특히 여러 pushToken 에 Badge 보내는 부분 어떻게 처리하시나요?

ByungHyun Ahn

unread,
Aug 25, 2015, 9:29:22 PM8/25/15
to ks...@googlegroups.com
안녕하세요? 해결책이 될런지는 모르겠지만 개인적인 경험을 공유드립니다.

1. GCM의 list pushToken 파라메터 
- pushToken을 리스트로 전달하는 이유는 동일한 메시지를 여러 client에게 한번에 전달하기 위해서입니다.
- client가 여럿일 뿐이고 실제로 가야할 메세지는 하나이니 badge와 message도 1개만 입력 받습니다.
- 동일한 메시지를 단건 단건 여러 client에게 보낼수도 있지만 효율성면에서는 list 전달이 좋긴 합니다. (GCM이 HTTPS를 쓰다보니 단건씩 보내면 좀 느립니다.)
- 푸시 받아야할 클라이언트가 여럿이고 각각 받아야할 badge수가 다르다면 한건씩 따로 보내주세야 합니다.

2. 개별 푸시 여러개를 발송할 경우 느려지는 문제
- 서비스가 점점 커지면서 반드시 발생하는 문제입니다. 
- 서버 한대만으론 해결이 어렵고 개인적으로 메세지큐와 푸시대몬 조합으로 해결했었습니다.
- 그리고 APNS(javapns-jdk16 라이브러리)는 GCM과 달리 한번 연결된 tcp를 통해 여러개의 message를 연속적으로 보낼수 있긴한데 alive time, fail 처리등을 생각하면 그냥 매건 매건 close후 새로 연결하는게 관리하는 입장에서는 속편합니다. (물론 효율적이지 못하지만 mq과 여러대의 대몬을 믿고.....먼산.....)



2015년 8월 25일 오후 12:35, 동준금 <faw...@gmail.com>님이 작성:

--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/046964e6-ea91-4a74-8144-786de00a3210%40googlegroups.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.

Reply all
Reply to author
Forward
0 new messages