使用場景:1.使用javaPNS2_2做的與apns服務(wù)的連接,該連接是長連接形式,能夠連接成功;2.在向apns服務(wù)發(fā)送消息時(shí)會對當(dāng)前連接判斷,使用的是java.net.Socket自帶的isClosed、isOutputShutdown、isInputShutdown 三個(gè)方法進(jìn)行判斷,如果有一個(gè)是false那么關(guān)閉并重新連接。3.發(fā)送完畢后會獲取當(dāng)前發(fā)送的反饋信息,沒有錯(cuò)誤反饋。4.測試的手機(jī)token為有效的,連接apns反饋服務(wù)返回的不可用設(shè)備token為空。問題:剛啟動(dòng)服務(wù)或者自己編寫的推送服務(wù)一直處于忙碌狀態(tài)(向apns發(fā)送信息時(shí)間間隔較短)時(shí)手機(jī)設(shè)備可以收到推送,正常。如果較長時(shí)間(大約1小時(shí)左右)沒有向apns發(fā)送信息,則會出現(xiàn)顯示發(fā)送成功但是手機(jī)接收不到推送消息的情況,再次發(fā)送則手機(jī)收到推送(連續(xù)發(fā)送兩次,第一次手機(jī)沒收到,第二次以后都可以);如果很長時(shí)間(大約1晚上)沒向apns發(fā)送信息,則不管發(fā)送多少次手機(jī)都接收不到推送。以上所有情況發(fā)生時(shí),socket的判斷都是連接可用。我一直懷疑長連接的問題,也看網(wǎng)上有人提過,他是每過一定時(shí)間(半小時(shí)還是一小時(shí)忘記了)就重啟連接。但我覺得這個(gè)是取巧,也是逼不得已的情況下采取的措施。希望有做過的人給支支招,或者分析下可能的原因
請問在判斷長連接狀態(tài)方面沒有什么更好的辦法?
慕姐8265434
2023-04-26 19:15:29