2013-01-23 13 views
8

Jak wysłać dane o niskim opóźnieniu do serwera iz powrotem za pomocą phonegapa?WebSockets lub alternatywa z phonegap?

Biorąc pod uwagę, że nie mam lokalnego dostępu do plików php i nie mam doświadczenia z node.js lub WebSockets, nie wiem, których użyć.

Odpowiedz

11

WebSockets nie są obsługiwane natywnie przez przeglądarki w Androidzie lub older versions of Cordova under iOS, co oznacza, że ​​musisz użyć wtyczki PhoneGap, jeśli chcesz ich używać na kliencie.

Jest więcej informacji na: http://remysharp.com/2010/10/04/websockets-in-phonegap-projects/

Jednak nie jestem pewien (nawet z wtyczką) jak sprężysta WebSockets mogą być, gdy urządzenie porusza się między połączeniami sieciowymi (WiFi -> 3G -> WiFi) , więc korzystanie z prostego serwisu internetowego do odpytywania może być bardziej niezawodną opcją, jeśli Twoja aplikacja musi kontynuować otrzymywanie danych podczas przemieszczania się użytkowników.

Jeśli chcesz otrzymywać dane zainicjowane przez serwer, zastanów się, czy zamiast tego używaj powiadomień wypychanych: zarówno system iOS (APN), jak i Android (C2DM) udostępniają interfejsy API, które umożliwiają bardziej wydajne korzystanie z baterii, niż gdy Twoja aplikacja odpytuje serwer stale.

+0

Co by się stało, gdy urządzenie zmieniło połączeń i używałem websocket? Czy jest jakieś wydarzenie, które poradzę sobie, gdy to się stanie? ... Gdybym miał korzystać z powiadomień push, to co by wymagało zintegrowania API z oprogramowaniem phonegap? Nie mam prawie żadnego doświadczenia w pisaniu kodu dla rodzimego systemu, tylko języki programowania. – maxhud

+0

@maxhud: zależy to od biblioteki WebSocket (pamiętaj, że musisz użyć wtyczki, ponieważ nie są one obsługiwane natywnie). Domyślam się, że w większości przypadków zerwaliby połączenie. To, czy możesz to wykryć, zależy od interfejsu API biblioteki. W przypadku powiadomień wypychanych należy użyć wtyczki PhoneGap. https://github.com/marknutter/GCM-Cordova obsługuje Google Cloud Messaging; https://github.com/purplecabbage/phonegap-plugins/tree/master/iOS/PushNotification obsługuje powiadomienia Apple Push. – rmc47

+0

@maxhud ... continued: Należy pamiętać, że jeśli używasz hostowanej usługi kompilacji, takiej jak PhoneGap Build lub Nomad for Visual Studio (ujawnienie: jestem w zespole Nomad), prawdopodobnie nie będziesz w stanie używać natywne wtyczki, takie jak te wymienione powyżej. W takim przypadku prawdopodobnie będziesz musiał odpytać usługę internetową w odpowiedniej wysokości. – rmc47

0

Patrz na ten link, aby zobaczyć websocket support poprzez przeglądarek i urządzeń: html5test.com site - iOS wersji 4.2 lub nowszej już obsługuje websocket

Zobacz this doc który wyjaśnia, jak stworzyć prostą aplikację z websocket.

Niestety treść jest w języku portugalskim (Brazylia), ale możesz zostawić komentarz, na który odpowiem.

+0

Będę najpierw opracowywać aplikacje dla Androida, więc dziękuję, ale to nie do końca jestem Szukać czegoś – maxhud

0

Nie jestem pewien, co masz na myśli przez "dostęp do plików PHP lokalnie". Używanie node.js i gniazd internetowych również nie wyklucza się wzajemnie.

Jeśli nie podjąłeś decyzji o implementacji serwera, możesz przejść do pliku node.js lub ASP.NET.

node.js ma dobre wsparcie dla gniazd z Socket.io, co pozwala na uproszczenie wdrożenia klienta. Więc będzie korzystać z WebSockets, jeśli jest wsparcie, w przeciwnym razie zostanie przywrócone do długiego sondowania.

ASP.NET ma bibliotekę o nazwie SignalR, która robi coś podobnego dla platformy .NET.

4

Możesz używać WebSockets w PhoneGap z iOS i Androidem. WebSockets są natywnie obsługiwane na iOS w Safari. W przypadku Androida musisz użyć polyfill.

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

powyżej Odpowiedź zawiera informacje na temat sposobu, aby obiekt websocket dostępny w Android WebView używanego przez PhoneGap i zapewnia także link do przykładowego projektu, które można wykorzystać, aby zacząć.

WebSockets zostały opracowane jako rozwiązanie dla "Cometa". Jako takie, zapewniają rozwiązanie o bardzo niskim opóźnieniu dla dwukierunkowej komunikacji w czasie rzeczywistym między klientem a serwerem. Oznacza to niską przepustowość i niskie zużycie zasobów - baterię na urządzeniach mobilnych - ponieważ trzymasz pojedyncze połączenie otwarte, a nie otwierasz i zamykasz wiele połączeń HTTP. Rozwiązanie odpytywania, które wysyła żądania w regularnych odstępach czasu, prawdopodobnie wyczerpuje baterię znacznie szybciej niż rozwiązanie WebSocket.Jeśli odpytywanie odbywa się w niższych odstępach czasu, może być w porządku - zależy to od przypadku użycia.

Jeśli chodzi o WebSockets pracujące podczas zmiany między siecią a typem sieci (WiFi -> 3G -> WiFi), to jeśli korzystasz z WebSockets natywnie musisz wykryć onclose i ponownie połączyć się. Będziesz także musiał określić najlepszy typ połączenia; niezabezpieczony (WS) lub bezpieczny (WSS). Gorąco polecam korzystanie z WSS dla urządzeń mobilnych, ponieważ niektórzy operatorzy sieci komórkowych używają przezroczystych serwerów proxy, które zakłócają połączenia WS. To może wydawać się skomplikowane, ale istnieje wiele bibliotek, które radzą sobie z tym za Ciebie. Takich jak Pusher JavaScript library (Uwaga: Pracuję dla Pusher). Biblioteki takie jak ta również zastępują mniej wydajne rozwiązanie oparte na HTTP, gdy środowisko nie pozwoli na żadne połączenie WebSocket.

Zobacz również: realtime web technology guide.

Zgodziłbym się z @ rmc47 że należy rozważyć powiadomień push rodzime czy to dla rzadkich pojedynczych zgłoszeń