![](/img/trans.png)
[英]How to keep iphone ios websocket connection alive while in the background?
[英]How can an iOS app keep a TCP connection alive indefinitely while in the background?
一個 iPhone 應用程序,通過 TCP 連接到遠程服務器。 使用場景有:
假設應用程序在 30 分鍾內沒有向服務器發送數據,服務器將關閉連接。 即使用戶什么都不做,我也想讓連接保持 120 分鍾。
案例1:如果應用程序在前台,我可以使用計時器向服務器發送一些無操作數據。 沒問題。
案例2 :如果用戶按下主頁並且應用程序進入后台,我該怎么辦? 我不想顯示警報或打斷用戶的東西(他不在或玩游戲)。 我只想讓連接保持更長時間,當用戶回到應用程序時,他發現連接仍然存在並且對此感到滿意。
我已閱讀有關 iphone API 的后台執行、多任務處理和本地通知的文檔。 我不確定是否可以實現 Case 2 。
只使用合法的 API,不越獄。
請查看 Apple 的 iOS 應用程序編程指南中的實現 VoIP 應用程序。 這不是經過測試的解決方案,但我認為它可以用來實現您的要求。
實施 VoIP 應用程序
Internet 協議語音 (VoIP) 應用程序允許用戶使用 Internet 連接而不是設備的蜂窩服務撥打電話。 這樣的應用程序需要保持與其關聯服務的持久網絡連接,以便它可以接收傳入呼叫和其他相關數據。 該系統不是讓 VoIP 應用程序一直處於喚醒狀態,而是允許它們暫停,並為它們提供監控 sockets 的設施。 當檢測到傳入流量時,系統會喚醒 VoIP 應用程序並將其 sockets 的控制權返回給它。
我不確定您是否正在開發 VoIP 應用程序,但您將能夠訪問 sockets 並對傳入的數據包做出反應。 引用后的文本是指[setKeepAliveTimeout:handler:][2]
,它允許您設置一個代碼塊,使您能夠保持(您的 VoIP)連接的活動。 不過,最短調度時間是 10 分鍾。
在實現 VoIP 應用程序中有一段關於安裝 Keep-Alive 處理程序。 我很好奇這是否會有所幫助。 如果這解決了您的問題,請給我們留言。
1.用這樣的VOIP屬性創建你的套接字
[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
[outputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;
2.在app.plist中添加所需的后台模式為“App提供Voice over IP服務”
如果您的應用程序處於后台模式,則 voip 套接字將不會關閉。 將此套接字與 uilocal 通知一起使用,您可以獲得。
“如果您的應用程序不是原始 voip 應用程序應用商店將拒絕”
當應用程序在前台時:
看STOMP http://stomp.codehaus.org/Protocol
Obj-C 中的 STOMP 框架http://code.google.com/p/stompframework/
和 ActiveMQ 代理http://activemq.apache.org/
當應用程序在后台時,我可能會 go 使用 APNS(通知)提示用戶喚醒應用程序備份......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.