2013-01-23 42 views
8

如何將低延遲數據發送到服務器並返回phonegap?WebSockets還是帶手機的替代品?

考慮到我無法在本地訪問php文件,並且沒有使用node.js或WebSockets的經驗,我不知道應該使用哪些文件。

回答

11

WebSockets並非由Android或older versions of Cordova under iOS中的瀏覽器原生支持,這意味着如果要在客戶端上使用它們,則需要使用PhoneGap插件。

在有更多信息:http://remysharp.com/2010/10/04/websockets-in-phonegap-projects/

但是,我不知道(甚至與插件)的WebSockets如何彈性很可能是在網絡連接之間的設備移動(無線網絡 - > 3G - >無線網絡) ,因此如果您的應用需要在用戶移動時繼續接收數據,那麼使用簡單的輪詢Web服務可能是更可靠的選項。

如果您需要接收服務器發起的數據,請考慮使用推送通知:iOS(APN)和Android(C2DM)都提供API來執行此操作,使電池的使用效率高於讓應用程序輪詢您的電池服務器不斷。

+0

會發生什麼?發生這種事情時我能處理哪些事件? ...如果我要使用推送通知,那麼將API集成到phonegap軟件需要什麼?我幾乎沒有經驗爲本地系統編寫代碼,只有Web開發語言。 – maxhud

+0

@maxhud:這取決於WebSocket的庫(記住你必須使用插件,因爲他們本身不支持)。我的猜測是,在大多數情況下,他們會終止連接。是否可以檢測到這取決於庫的API。 對於推送通知,您需要使用PhoneGap的插件。 https://github.com/marknutter/GCM-Cordova支持Google的雲消息傳遞; https://github.com/purplecabbage/phonegap-plugins/tree/master/iOS/PushNotification支持Apple推送通知。 – rmc47

+0

@maxhud ...續:請注意,如果您使用的是託管生成服務,如PhoneGap的構建或遊牧爲Visual Studio(披露:我對保薦人隊),你可能會無法使用本地插件就像我上面提到的插件。在這種情況下,您可能只需以適當的速度輪詢您的Web服務。 – rmc47

0

參考此鏈接查看由瀏覽器和設備的WebSocket支持:html5test.com site - 的iOS 4.2+已經支持WebSocket的

this doc解釋如何發展的WebSocket一個簡單的應用程序。

不幸的是,該內容是在葡萄牙語(巴西)的語言,但你可以留下評論,我會回答。

+0

我將首先開發android應用程序,所以謝謝,但這不完全是我所知尋找 – maxhud

0

我不確定「本地訪問PHP文件」的含義。 node.js和web套接字的使用也不是相互排斥的。

如果你還沒有在服務器實現上做出決定,你可以選擇node.js或ASP.NET。

node.js對插座有很好的支持,Socket.io爲您抽象了客戶端實現。所以如果有支持,它將使用WebSockets,否則它將回退到長輪詢。

ASP.NET有一個名爲SignalR的庫,它爲.NET平臺做了類似的事情。

4

您可以在iOS和Android中使用PhoneGap中的WebSockets。 WebSocket本身在Safari中的iOS上受支持。對於Android,您需要使用polyfill。

參見:https://stackoverflow.com/a/13527585/39904

上面的答案提供了有關如何使可用的WebSocket對象通過PhoneGap的用過Android的WebView中的信息,並且還提供了一個鏈接,你可以用它來開始一個樣本項目。

WebSockets是作爲'Comet'黑客解決方案而開發的。因此,它們爲客戶端和服務器之間的實時雙向通信提供了非常低延遲的解決方案。這意味着低帶寬和低資源使用率 - 移動設備上的電池 - 因爲您正在打開單個連接,而不是打開和關閉多個HTTP連接。定期發出請求的輪詢解決方案可能比WebSocket解決方案耗盡電池快得多。如果你以較低的時間間隔進行輪詢,那麼它可能沒問題 - 這取決於你的用例。

就WebSockets而言,當您在網絡和網絡類型(WiFi - > 3G - > WiFi)之間切換時,如果您在本地使用WebSockets,則需要檢測onclose並重新連接。您還需要確定最佳的連接類型;不安全(WS)或安全(WSS)。由於某些移動網絡提供商使用干擾WS連接的透明代理,我強烈建議您將WSS用於移動設備。這聽起來很複雜,但有很多庫可以爲你處理。如Pusher JavaScript library注:我的推杆工作)。當這些環境不允許任何WebSocket連接發生時,這些庫也可以回退到效率較低的基於HTTP的解決方案。

另見:realtime web technology guide

我與@ rmc47同意,你應該考慮本地推送通知,如果它是罕見的單通知時,該設備改變連接,我使用的是WebSocket的