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