使用PhoneGap时,WebSockets或其替代方案?

8

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

考虑到我没有本地访问php文件的权限,也没有使用node.js或WebSockets的经验,我不知道该使用哪个。

4个回答

11

WebSockets在Android浏览器或iOS下的较旧版本Cordova不受原生支持,这意味着如果您想在客户端使用它们,您需要使用PhoneGap插件。

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

然而,即使使用插件,我也不确定WebSockets在设备在网络连接之间移动时的弹性如何,因此,如果您的应用程序需要在用户移动时继续接收数据,则使用简单的轮询Web服务可能是更可靠的选择。

如果您需要接收服务器启动的数据,请考虑使用推送通知:iOS(APN)和Android(C2DM)都提供API来实现这一点,这比让您的应用程序不断轮询服务器更有效地利用电池。


当设备更改连接并且我正在使用WebSocket时会发生什么?是否有某种事件可以处理此类情况?如果我要使用推送通知,将需要将API集成到PhoneGap软件中,这需要什么?我几乎没有编写本地系统代码的经验,只有Web开发语言的经验。 - Max Hudson
@maxhud:这取决于WebSocket库(请记住,您必须使用插件,因为它们不受本地支持)。我猜在大多数情况下,它们会终止连接。您能否检测到这一点取决于库的API。对于推送通知,您需要使用PhoneGap插件。https://github.com/marknutter/GCM-Cordova支持Google的云消息传递;https://github.com/purplecabbage/phonegap-plugins/tree/master/iOS/PushNotification支持苹果推送通知。 - rmc47
2
WebSockets在iOS的Safari浏览器中得到了原生支持。因此,在iOS上,使用PhoneGap开发时,WebSockets可以直接使用,无需额外配置。 - leggetter
有一个PhoneGap Build插件可以处理Android上的WebSockets:https://build.phonegap.com/plugins/478 - user276648
2
这个回答和相关评论相当古老了,现在几乎所有的移动浏览器都支持Websockets(截至2017年1月,除了Opera Mini):http://caniuse.com/#search=websocket - David M.
显示剩余2条评论

4
你可以在iOS和Android中使用WebSockets。在iOS上,WebSockets在Safari中得到原生支持。对于Android,您需要使用一个polyfill。
参见:https://dev59.com/PWYr5IYBdhLWcg3wpbyQ#13527585 上面的答案提供了如何在PhoneGap中使用Android WebView使WebSocket对象可用的信息,并提供了一个示例项目的链接,您可以使用该项目来开始。
WebSockets是作为“Comet”黑客的解决方案而开发的。因此,它们为客户端和服务器之间的实时双向通信提供了非常低的延迟解决方案。这意味着低带宽和低资源使用 - 移动设备上的电池 - 因为您只保持一个连接打开,而不是打开和关闭多个HTTP连接。定期进行请求的轮询解决方案可能会比WebSocket解决方案更快地耗尽电池。如果您以较低的间隔进行轮询,则可能没有问题 - 这取决于您的用例。
关于WebSockets在不同网络类型之间切换(WiFi-> 3G-> WiFi)的工作,如果您使用原生的WebSockets,那么需要检测onclose并重新连接。您还需要确定最佳连接类型; 不安全(WS)或安全(WSS)。我强烈建议您在移动设备上使用WSS,因为一些移动网络提供商使用透明代理干扰WS连接。这听起来可能很复杂,但有许多库可以为您处理此问题,例如Pusher JavaScript library注意:我是Pusher的员工)。这些库还会在环境不允许任何WebSocket连接发生时提供回退到效率较低的基于HTTP的解决方案。
另请参阅:实时Web技术指南
如果只涉及偶尔的单个通知,则应考虑使用本地推送通知,我同意@rmc47的看法。

0

请参考此链接以查看浏览器和设备的WebSocket支持情况:html5test.com site - iOS 4.2+已经支持WebSocket

请查看this doc,其中解释了如何使用WebSocket开发简单应用程序。

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


我会首先开发Android应用程序,所以谢谢,但这不是我正在寻找的。 - Max Hudson

0

我不确定你所说的“本地访问PHP文件”的意思。同时使用node.js和web sockets也并非互斥。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接