2013-01-23 19 views
8

Tôi làm cách nào để gửi dữ liệu độ trễ thấp đến máy chủ và quay lại bằng điện thoại?WebSockets hoặc thay thế bằng Phonegap?

Xem xét tôi không có quyền truy cập vào tệp php cục bộ và không có kinh nghiệm với node.js hoặc WebSockets Tôi không biết tôi nên sử dụng cái nào.

Trả lời

11

WebSockets không được hỗ trợ nguyên bản bởi các trình duyệt trong Android hoặc older versions of Cordova under iOS, có nghĩa là bạn sẽ cần sử dụng plugin PhoneGap nếu bạn muốn sử dụng chúng trên máy khách.

Có thêm thông tin tại địa chỉ: http://remysharp.com/2010/10/04/websockets-in-phonegap-projects/

Tuy nhiên, tôi không chắc chắn (ngay cả với các plugin) như thế nào WebSockets đàn hồi có thể sẽ là khi di chuyển thiết bị giữa các kết nối mạng (WiFi -> 3G -> WiFi) , do đó, sử dụng một dịch vụ web bỏ phiếu đơn giản có thể là một tùy chọn đáng tin cậy hơn nếu ứng dụng của bạn cần tiếp tục nhận dữ liệu khi người dùng di chuyển xung quanh.

Nếu bạn cần nhận dữ liệu do máy chủ khởi tạo, hãy cân nhắc sử dụng thông báo đẩy: cả iOS (APN) và Android (C2DM) đều cung cấp API để thực hiện việc này giúp sử dụng pin hiệu quả hơn máy chủ liên tục.

+0

Điều gì sẽ xảy ra khi thiết bị thay đổi kết nối và tôi đang sử dụng websocket? Có một số loại sự kiện tôi có thể xử lý khi điều đó xảy ra không? ... Nếu tôi sử dụng thông báo đẩy, nó sẽ yêu cầu tích hợp API vào phần mềm phonegap? Tôi hầu như không có kinh nghiệm viết mã cho hệ thống bản địa, chỉ có ngôn ngữ phát triển web. – maxhud

+0

@maxhud: nó phụ thuộc vào thư viện WebSocket (nhớ rằng bạn sẽ phải sử dụng một plugin, vì chúng không được hỗ trợ nguyên bản). Tôi đoán là trong hầu hết các trường hợp, họ sẽ chấm dứt kết nối. Cho dù bạn có thể phát hiện điều đó phụ thuộc vào API của thư viện hay không. Đối với thông báo đẩy, bạn cần sử dụng plugin PhoneGap. https://github.com/marknutter/GCM-Cordova hỗ trợ Nhắn tin qua đám mây của Google; https://github.com/purplecabbage/phonegap-plugins/tree/master/iOS/PushNotification hỗ trợ Thông báo đẩy của Apple. – rmc47

+0

@maxhud ... tiếp tục: Lưu ý rằng nếu bạn đang sử dụng dịch vụ xây dựng được lưu trữ, chẳng hạn như PhoneGap Build hoặc Nomad cho Visual Studio (tiết lộ: Tôi thuộc nhóm Nomad), có thể bạn sẽ không thể sử dụng các plugin gốc như những cái tôi đã tham chiếu ở trên. Trong trường hợp đó, có thể bạn sẽ chỉ phải thăm dò ý kiến ​​dịch vụ web của mình với tốc độ thích hợp. – rmc47

0

Tham khảo link này để xem WebSocket hỗ trợ bởi trình duyệt và các thiết bị: html5test.com site - iOS 4.2 trở lên đã hỗ trợ WebSocket

Xem this doc giải thích làm thế nào để phát triển một ứng dụng đơn giản với WebSocket.

Thật không may nội dung bằng tiếng Bồ Đào Nha (Braxin) nhưng bạn có thể để lại nhận xét mà tôi sẽ trả lời.

+0

Tôi sẽ phát triển các ứng dụng Android đầu tiên nên cảm ơn, nhưng điều này không hoàn toàn là những gì tôi tìm kiếm – maxhud

0

Tôi không chắc chắn ý bạn là gì khi "truy cập vào tệp PHP cục bộ". Việc sử dụng node.js và ổ cắm web cũng không loại trừ lẫn nhau.

Nếu bạn chưa đưa ra quyết định về việc triển khai máy chủ, bạn có thể sử dụng node.js hoặc ASP.NET.

node.js có hỗ trợ tốt cho các ổ cắm với Socket.io, tóm tắt việc triển khai ứng dụng khách cho bạn. Vì vậy, nó sẽ sử dụng WebSockets nếu có hỗ trợ, nếu không nó sẽ rơi trở lại để bỏ phiếu dài.

ASP.NET có thư viện có tên là SignalR có chức năng tương tự cho nền tảng .NET.

4

Bạn có thể sử dụng WebSockets trong PhoneGap với iOS và Android. WebSockets được hỗ trợ nguyên bản trên iOS trong Safari. Đối với Android, bạn sẽ cần phải sử dụng một polyfill.

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

Câu trả lời trên đây cung cấp thông tin về làm thế nào để làm cho một đối tượng WebSocket sẵn trong WebView Android được sử dụng bởi PhoneGap và cũng cung cấp một liên kết đến một dự án mẫu mà bạn có thể sử dụng để bắt đầu.

WebSockets được phát triển như một giải pháp cho các cuộc tấn công 'Comet'. Vì vậy, chúng cung cấp một giải pháp độ trễ rất thấp cho truyền thông hai hướng thời gian thực giữa máy khách và máy chủ. Điều này có nghĩa là băng thông thấp và mức sử dụng tài nguyên thấp - pin trên thiết bị di động - vì bạn đang nắm giữ một kết nối duy nhất mở thay vì sau đó mở và đóng nhiều kết nối HTTP. Một giải pháp bỏ phiếu tạo ra các yêu cầu trong khoảng thời gian đều đặn có khả năng tiêu hao pin nhanh hơn nhiều so với giải pháp WebSocket.Nếu bạn đang bỏ phiếu ở những khoảng thời gian thấp hơn thì điều đó có thể tốt - điều đó phụ thuộc vào trường hợp sử dụng của bạn.

Về WebSockets hoạt động khi bạn thay đổi giữa mạng và loại mạng (WiFi -> 3G -> WiFi) thì nếu bạn đang sử dụng WebSockets, bạn cần phải phát hiện onclose và kết nối lại. Bạn cũng sẽ cần phải xác định loại kết nối tốt nhất; không an toàn (WS) hoặc bảo mật (WSS). Tôi rất muốn giới thiệu bạn sử dụng WSS cho điện thoại di động vì một số nhà cung cấp mạng di động sử dụng proxy trong suốt có thể can thiệp vào các kết nối WS. Điều này nghe có vẻ phức tạp nhưng có một số thư viện xử lý việc này cho bạn. Chẳng hạn như Pusher JavaScript library (lưu ý: Tôi làm việc cho Pusher). Các thư viện như vậy cũng cung cấp dự phòng cho một giải pháp dựa trên HTTP kém hiệu quả hơn khi môi trường không cho phép bất kỳ kết nối WebSocket nào xảy ra.

Xem thêm: realtime web technology guide.

Tôi đồng ý với @ rmc47 rằng bạn nên xem xét thông báo đẩy gốc nếu thông báo đơn lẻ không thường xuyên

Các vấn đề liên quan