最近、Apple はテクニカル ノート TN2265 - プッシュ通知のトラブルシューティングを修正しました。彼らは、スループットとエラー チェックに関するセクションを追加しました。
これはそのセクションから取られます:
拡張バイナリ インターフェイスを使用する場合のエラーを確認する方法は次のとおりです。書き込みが失敗するまで書き込みを続けます。ストリームの書き込み準備が整ったら、通知を再送信して続行します。ストリームが書き込みの準備ができていない場合は、ストリームが読み取り可能かどうかを確認してください。
存在する場合は、ストリームから利用可能なすべてを読み取ります。0 バイトが返された場合は、無効なコマンド バイトやその他の解析エラーなどのエラーが原因で、接続が閉じられています。6 バイトが返された場合、それはエラー応答であり、応答コードと、エラーの原因となった通知の ID を確認できます。その後、すべての通知を再度送信する必要があります。
すべてが送信されたら、エラー応答の最後のチェックを行います。
通常の遅延のため、切断された接続が APNs からサーバーに戻るまでに時間がかかる場合があります。接続が切断されたために書き込みが失敗する前に、500 を超える通知を送信することができます。約 1,700 件の通知の書き込みが、パイプがいっぱいになったという理由だけで失敗する可能性があるため、その場合は、ストリームが再び書き込み可能になったら再試行してください。
私の APN プロバイダー サーバーは、ブロッキング ソケットを使用して Java で記述されています ( SSLSocket
)。
を使用して、太字で提案されていることを行うことは可能SSLSocket
ですか? 書き込みが失敗した後、ソケットに再度書き込むことはできますか? この場合、ソケットは閉じませんか?ストリームが再び書き込み可能かどうかを確認するにはどうすればよいですか? 閲覧可能かどうかはどうすればわかりますか?
NIO を使用するのは避けたいと思いSSLEngine
ます。