1

iPhone アプリにプッシュ通知を送信する単純な Web サーバーに取り組んでいます。既存の Python パッケージを使用してみましたが、すべてこの問題に悩まされています。

無効なトークンが送信されると、Apple はエラー メッセージを送り返し、ソケットを閉じます。大量のプッシュ通知を送信する必要がありますが、そのうちの 1 つに無効なトークンがあると、残りは Apple に配信されません。

したがって、現在、私のコードは次のようになります。

for m in messages:
    socket.send(m)

ただし、最初のメッセージに無効なトークンがある場合、Apple は最初のメッセージを受信するとすぐにソケットを閉じますが、ソケットはエラーなしですべてのメッセージを送信します。

recv時間がかかりすぎるため、各メッセージの後にタイムアウトを設定する余裕はありません。ソケットが閉じられたことを知り、新しいソケットを開くにはどうすればよいですか?

4

2 に答える 2

1

ソケットがもう一方の端で閉じられていた場合、recvそれが返される0か、エラーが発生するはずです。


によって送信されたバイト数を確認できますsend


更新:ソケット接続がまだ有効かどうかを監視する別の可能性については、こちらをお読みください。


Update-1:別のアプローチは、書き込み操作と並行して、問題のソケットで常に読み取りスレッドを実行することです...あなたが言及したように:時間はあなたの限界です。

于 2012-05-06T06:15:14.883 に答える
0

TCP レベルでは、どのパケットが送信されたかを知る方法がないことを知りました。すべてのメッセージを送信してから、(タイムアウトで) Apple からのエラー メッセージを待つことにしました。エラーがある場合は、失敗したものを繰り返し送信します。

無効なトークンを取得することはまれなイベントであり、ほとんどの場合、すべての通知が通過するため、これを使用することにしました。

于 2012-05-06T07:36:43.473 に答える