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