8

如何使用 phonegap 将低延迟数据发送到服务器并返回?

考虑到我无法在本地访问 php 文件,也没有使用 node.js 或 WebSockets 的经验,我不知道应该使用哪些。

4

4 回答 4

11

Android 中的浏览器或iOS 下的旧版 Cordova中的浏览器本身不支持 WebSocket ,这意味着如果您想在客户端上使用它们,则需要使用 PhoneGap 插件。

更多信息请访问:http ://remysharp.com/2010/10/04/websockets-in-phonegap-projects/

但是,我不确定(即使使用插件)当设备在网络连接(WiFi -> 3G -> WiFi)之间移动时,WebSocket 的弹性可能有多大,因此使用简单的轮询 Web 服务可能是更可靠的选择如果您的应用需要在用户四处移动时继续接收数据。

如果您需要接收服务器发起的数据,请考虑使用推送通知:iOS (APN) 和 Android (C2DM) 都提供了 API 来执行此操作,这比让您的应用程序不断地轮询服务器更有效地利用电池。

于 2013-01-23T15:58:50.947 回答
4

您可以在 iOS 和 Android 的 PhoneGap 中使用 WebSockets。Safari 中的 iOS 原生支持 WebSockets。对于 Android,您将需要使用 polyfill。

请参阅:https ://stackoverflow.com/a/13527585/39904

上面的答案提供了有关如何在 PhoneGap 使用的 Android WebView 中使 WebSocket 对象可用的信息,还提供了一个示例项目的链接,您可以使用该链接开始。

WebSockets 是作为“彗星”黑客攻击的解决方案而开发的。因此,它们为客户端和服务器之间的实时双向通信提供了非常低延迟的解决方案。这意味着低带宽和低资源使用 - 移动设备上的电池 - 因为您保持打开单个连接而不是打开和关闭多个 HTTP 连接。定期发出请求的轮询解决方案可能比 WebSocket 解决方案更快地耗尽电池电量。如果您以较低的间隔进行轮询,那么它可能没问题 - 这取决于您的用例。

当您在网络和网络类型(WiFi -> 3G -> WiFi)之间更改时,WebSockets 工作,那么如果您在本机使用 WebSockets,则需要检测onclose并重新连接。您还需要确定最佳的连接类型;不安全 (WS) 或安全 (WSS)。我强烈建议您将 WSS 用于移动设备,因为一些移动网络提供商使用会干扰 WS 连接的透明代理。这听起来可能很复杂,但有许多库可以为您处理这个问题。比如Pusher JavaScript 库注意:我为 Pusher 工作)。当环境不允许任何 WebSocket 连接发生时,诸如此类的库还提供回退到基于 HTTP 的效率较低的解决方案。

另请参阅:实时网络技术指南

我同意@rmc47 的观点,如果它是针对不频繁的单个通知,您应该考虑原生推送通知

于 2013-01-25T11:53:12.473 回答
0

我不确定“本地访问 PHP 文件”是什么意思。node.js 和 web 套接字的使用也不是相互排斥的。

如果您还没有决定服务器实现,您可以选择 node.js 或 ASP.NET。

node.js 对带有Socket.io的套接字有很好的支持,它为您抽象了客户端实现。因此,如果有支持,它将使用 WebSockets,否则它将退回到长轮询。

ASP.NET 有一个名为SignalR的库,它为 .NET 平台做类似的事情。

于 2013-01-23T17:00:41.350 回答
0

请参阅此链接以查看浏览器和设备对 WebSocket 的支持:html5test.com 站点- iOS 4.2+已经支持 WebSocket

请参阅解释如何使用 WebSocket 开发简单应用程序的文档。

不幸的是,内容是葡萄牙语(巴西)语言,但您可以留下评论,我会回答。

于 2013-01-23T16:33:00.917 回答