CI 묻고 답하기

제목 APSN 개발중에 SSL: Broken pipe 문제가 발생됩니다.
글쓴이 조주상 작성시각 2013/08/30 14:29:01
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 21638   RSS
주소  https://github.com/antongorodezkiy/codeigniter-apns
위 주소의 라이브러리를 사용해 애플 푸쉬서버를 구축중에 있습니다.
아래 라이브러리로 1개의 단말에  push 메세지를 보내면 이상없이 작동하는데


약6만개의 디바이스에 푸쉬 메세지를 보내려고 하니 약 50개 정도 푸쉬를 보내는 중 SSL: Broken pipe 에러가 발생됩니다.

에러가 나는 부분은
   $result = fwrite($this->pushStream, $msg, strlen($msg));

요 부분에서 에러가 나온다고 하는데 

정확한 에러메세지는 

A PHP Error was encountered

Severity: Warning

Message: fwrite() [function.fwrite]: SSL: Broken pipe

Filename: libraries/apn.php

Line Number: 206





이렇습니다.

개발 소스는 센드메세지 부분만 토큰 어레이 만큼 돌리도록 개발하였습니다.

그러니까 for문을 약 6만번 정도 도는 것입니다.


foreach ($array_ios as $value) {
    $send_result = $this->apn->sendMessage($value, $this->input->post('send_message'), /*badge*/ 2, /*sound*/ 'default'  );
}
 
기존에안드로이드 개발만 하다가 CI를 한지 한달정도 되었는데 가장 큰 벽에 부딫힌거 같습니다.ㅠㅠ



혹시 이걸로 구현하신분이나 도움주실수 있으신분 계시면 감사하겠습니다.


 다음글 API는 어디있나요? (4)
 이전글 session 질문이요~ (7)

댓글

변종원(웅파) / 2013/08/30 15:01:18 / 추천 0
검색해보니 ci나 apns library의 문제가 아니라 
토큰중에서 invalid한 토큰일 경우 애플에서 접속을 끊는 것이라고 하네요.

http://stackoverflow.com/questions/2626054/get-ssl-broken-pipe-error-when-try-to-make-push-notification

에러 났을 때 예외처리로 하시거나 warning은 무시할 수도 있는 것이라 에러메세지가 안나타나도록 해도 됩니다.

단, 해당 토큰은 삭제를 하거나 삭제된 것으로 필드 처리를 하여 다음 번에 발송되지 않도록 해야겠죠.
조주상 / 2013/08/30 17:04:10 / 추천 0
 답변감사합니다.
변종원님이 말씀하신대로 유효하지 않은 토큰으로 생각하고 리절트가 에러로 떨어지게 되면 다시 초기화를 하고 진행하니 문제있는 토크을 제외하곤 잘 보내지는 것 같습니다..

근데 한가지더 문제가 발생하였습니다.

A PHP Error was encountered

Severity: Warning

Message: stream_socket_client() [function.stream-socket-client]: SSL: connection timeout

Filename: libraries/apn.php

Line Number: 81

A PHP Error was encountered

Severity: Warning

Message: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto

Filename: libraries/apn.php

Line Number: 81

A PHP Error was encountered

Severity: Warning

Message: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error)

Filename: libraries/apn.php

Line Number: 81


타임아웃이 떨어지는 것 같은데요

혹시 이것에 대해도 알려주실수 없을까요? ㅠㅠ  검색해보면 대부분 pem 파일을 새로 받으라고 하는데 그것 아닌것 같습니다.


현재는 약 50개 정도 보내면 

$this->apn->disconnectPush();
           $this->apn->payloadMethod = 'enhance'; // you can turn on this method for debuggin purpose
   $this->apn->connectToPush();  
   $this->apn->setData(array( 'someKey' => true ));

이소스를 타면서 연결을 끊고 재연결을 해서 하도록 해놓았는데 위와 같은 타임아웃 문제가 발생되네요 ㅠㅠ

조주상 / 2013/08/30 20:55:13 / 추천 0
 라이브러리 사용하지 않고 새로 만들어서 해결하였습니다.
산들바람 / 2014/02/12 10:19:17 / 추천 0
 같은 문제로 고생 중 입니다.  해결 방법은 따로 없는건가요?