2013-01-23 19 views
8

Come posso inviare dati a bassa latenza a un server e viceversa con PhoneGap?WebSockets o un'alternativa con PhoneGap?

Considerando che non ho accesso ai file php localmente e non ho esperienza con node.js o WebSockets, non so quali utilizzare.

risposta

11

WebSockets non è supportato nativamente dai browser in Android o older versions of Cordova under iOS, il che significa che sarà necessario utilizzare un plug-in PhoneGap se si desidera utilizzarli sul client.

C'è di più informazioni a: http://remysharp.com/2010/10/04/websockets-in-phonegap-projects/

Tuttavia, non sono sicuro (anche con il plugin) come WebSockets resilienti sono suscettibili di essere quando il dispositivo si muove tra le connessioni di rete (Wi-Fi -> 3G -> WiFi) , quindi l'utilizzo di un semplice servizio Web di polling può essere un'opzione più affidabile se l'app deve continuare a ricevere i dati mentre gli utenti si spostano.

Se è necessario ricevere dati avviati dal server, prendere in considerazione l'utilizzo di notifiche push: sia iOS (APN) che Android (C2DM) forniscono API per fare ciò che consente un uso più efficiente della batteria rispetto all'app che esegue il polling dell'app server costantemente.

+0

cosa sarebbe successo quando il dispositivo ha cambiato le connessioni e mi stava usando un websocket? C'è qualche tipo di evento che posso gestire quando ciò accade? ... Se dovessi utilizzare le notifiche push, cosa richiederebbe per integrare l'API nel software di PhoneGap? Non ho quasi nessuna esperienza di scrittura del codice per il sistema nativo, solo linguaggi di sviluppo web. – maxhud

+0

@maxhud: dipende dalla libreria WebSocket (tenete presente che dovreste usare un plugin, dato che non sono supportati nativamente). La mia ipotesi è che nella maggior parte dei casi avrebbero interrotto la connessione. Se è possibile rilevare ciò dipende dall'API della libreria. Per le notifiche push, è necessario utilizzare un plug-in PhoneGap. https://github.com/marknutter/GCM-Cordova supporta Cloud Messaging di Google; https://github.com/purplecabbage/phonegap-plugins/tree/master/iOS/PushNotification supporta le notifiche push Apple. – rmc47

+0

@maxhud ... continua: si noti che se si utilizza un servizio di build in hosting, come PhoneGap Build o Nomad per Visual Studio (divulgazione: sono nel team Nomad), probabilmente non sarà possibile utilizzare plugin nativi come quelli cui ho fatto riferimento sopra. In tal caso, probabilmente dovrai semplicemente eseguire il polling del tuo servizio web a una velocità appropriata. – rmc47

0

fare riferimento a questo link per vedere Supporto WebSocket dal browser e dispositivi: html5test.com site - iOS 4.2+ supporta già WebSocket

Vedere this doc che spiega come sviluppare una semplice applicazione con WebSocket.

Sfortunatamente il contenuto è in portoghese (brasiliano), ma è possibile lasciare commenti a cui risponderò.

+0

Svilupperò prima le app Android, quindi grazie, ma non è esattamente quello che sono cercare – maxhud

0

Non sono sicuro di cosa intendi per "accesso ai file PHP localmente". Anche l'uso di node.js e web socket non si escludono a vicenda.

Se non si è deciso sull'implementazione del server, è possibile utilizzare node.js o ASP.NET.

node.js ha un buon supporto per socket con Socket.io, che astrae l'implementazione del client per voi. Quindi userà WebSockets se c'è supporto, altrimenti tornerà al polling lungo.

ASP.NET ha una libreria denominata SignalR che esegue un'operazione simile per la piattaforma .NET.

4

È possibile utilizzare WebSockets in PhoneGap con iOS e Android. I WebSocket sono nativamente supportati su iOS in Safari. Per Android è necessario utilizzare un polyfill.

See: https://stackoverflow.com/a/13527585/39904

La risposta di cui sopra fornisce informazioni su come rendere un oggetto WebSocket disponibili all'interno del WebView Android utilizzata da PhoneGap e fornisce anche un link ad un progetto di esempio che è possibile utilizzare per iniziare.

WebSockets sono stati sviluppati come soluzione agli hack "Comet". Come tali forniscono una soluzione di latenza molto bassa per la comunicazione bidirezionale in tempo reale tra un client e un server. Ciò significa larghezza di banda ridotta e basso utilizzo delle risorse - batteria su dispositivo mobile - poiché si tiene aperta una singola connessione piuttosto che l'apertura e la chiusura di più connessioni HTTP. È probabile che una soluzione di polling che effettui richieste a intervalli regolari scarichi la batteria molto più velocemente di una soluzione WebSocket.Se si sta eseguendo il polling a intervalli più bassi, potrebbe andare bene, dipende dal caso d'uso.

In termini di WebSocket che funzionano mentre si cambia tra rete e tipo di rete (WiFi -> 3G -> WiFi), quindi se si utilizza WebSockets in modo nativo è necessario rilevare il onclose e riconnettersi. Dovrai anche determinare il miglior tipo di connessione; unsecure (WS) o secure (WSS). Ti consiglio vivamente di utilizzare WSS per dispositivi mobili poiché alcuni provider di reti mobili utilizzano proxy trasparenti che interferiscono con le connessioni WS. Questo potrebbe sembrare complicato, ma ci sono un certo numero di librerie che gestiscono questo per voi. Ad esempio il Pusher JavaScript library (nota: lavoro per Pusher). Le librerie come queste forniscono anche una soluzione meno efficiente basata su HTTP quando l'ambiente non consente il verificarsi di alcuna connessione WebSocket.

Vedere anche: realtime web technology guide.

ero d'accordo con @ rmc47 che si dovrebbe prendere in considerazione le notifiche push native se è per poco frequenti singole notifiche