Errore SSL Notifiche push Apple

4

L'APNS ha funzionato bene per diversi mesi fino a poche settimane. Ogni volta che inviamo notifiche push, la connessione si interrompe con il seguente errore:

PHP Warning: fwrite(): SSL operation failed with code 1. OpenSSL Error messages: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry

Se mi ricollego e rinvio o invio di nuovo il messaggio al server Apple, ricevo lo stesso errore. A volte posso inviare a tutti i dispositivi senza alcun problema. Ma a volte si interrompe al 900 ° dispositivo o al 2000 ° dispositivo. Non è il I-have-not-the-device-from-Feedback-service-and-set-all-the-devices-to-inactive -Error. Mi collego al servizio di feedback a intervalli regolari. È un altro tipo di errore che non conosco. Qualcosa è cambiato con la connessione SSL. Può essere che Apple abbia cambiato qualcosa con la connessione SSL? Apple ha detto che non è così. E non supportano PHP.

Utilizziamo PHP 5.3.3-7 + squeeze3 con Suhosin-Patch (cli) (compilato: 28 giugno 2011 08:24:40) . Questa è la versione PHP più recente stabile per Debian Linux Squeeze. Questa versione di PHP utilizza OpenSSL 0.9.8o (01 giu 2010) sul nostro server.

Aiuta l'aiuto.

    
posta TheFox 29.08.2011 - 10:27
fonte

1 risposta

4

Avuto un problema simile in python, suppongo che le librerie ssl sottostanti siano le stesse così la soluzione potrebbe essere simile.

SSL3_WRITE_PENDING sembra essere causato da errori di scrittura del socket, quindi prova a scrivere di nuovo. In questo caso, per qualsiasi ragione, SSL_write richiede di riprovare a scrivere con gli stessi identici byte della scrittura originale oppure omette l'errore SSL_WRITE_PENDING.

Il modello di errori che stavo vedendo era Timeout della connessione, quindi molti errori SSL_WRITE_PENDING. Questo perché il primo di una delle mie scritture non è riuscito (diciamo forse con un errore di timeout o errore di connessione chiuso perché invio una richiesta push dubbia), poi dopo quell'errore stavo continuamente cercando di riutilizzare lo zoccolo rotto (e lo stava restituendo l'errore SSL_WRITE_PENDING meno che informativo)

Sei sicuro di utilizzare una nuova connessione socket quando "riconnetti e reinvia"? Perché non avrei pensato che dovresti ottenere SSL_WRITE_PENDING su una nuova connessione socket al server APNS.

Un'altra cosa che potrebbe aiutare è usare il formato di notifica avanzato, perché se invii accidentalmente una spinta interrotta al server Apple, ti invieremo un codice di errore prima di chiudere la connessione. Se non stai già utilizzando avanzato, sarebbe opportuno farlo perché in questo modo puoi assicurarti di non commettere errori semplici come token o payload troppo lunghi.

    
risposta data 14.11.2012 - 07:06
fonte

Leggi altre domande sui tag