带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets
Posted
技术标签:
【中文标题】带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets【英文标题】:WebSockets for Android in Phonegap application with Node.js/Socket.IO server&client 【发布时间】:2012-02-21 16:52:18 【问题描述】:我正在PhoneGap 中制作一个android 应用程序。我想做的是让应用程序通过 WebSockets 与我的 Node.js 服务器通信。我的 Node.js 服务器使用 Socket.IO,当我打开应用程序时它会自动退回到轮询,这与桌面 Chrome 应用程序相反,它会愉快地打开 WebSocket 并通过它进行通信。
我已阅读 this blogpost 关于将实际 WebSocket API 与 Phonegap 集成的内容。问题是我没有手动覆盖“onConnect,onMessage”函数,而是 Socket.IO 为我完成了所有这些。
有没有办法将 WebSockets 集成到我的 Android Phonegap 应用程序中?
【问题讨论】:
【参考方案1】:简答:Cordova WebView 不支持 WebSockets 并且 socket.io 不连接到基于标准的 WebSocket 客户端。
对于您的客户,如果您想要真正的 websockets,您似乎仍然需要使用特定于 Android 构建或 ios 构建的 Cordova 插件。试试this search,其中包括一个 Android 插件的 ansmiles repo,OP 引用的同一博客作者。
因此,考虑到这一点,socket.io 将不适用于您的服务器。不幸的是,socket.io 服务器不支持使用基于 html5 标准的 websocket 连接连接到客户端,您必须使用他们的客户端库。正如您所看到的,您不能在 Cordova 中使用他们的客户端库......好吧,您可以,它只会退回到轮询。
所以现在你的 websocket 客户端是一个基于标准的 Cordova 插件,你需要一个支持基于标准的 websocket 连接的服务器。你应该看看SockJs、Worlize、Miksago 或Einaros。还有其他的。我目前正在使用 Worlize。
要记住的另一件事是,目前有一小部分云主机支持真正的 websocket 连接。我推荐DotCloud 或Nodejitsu。
如果这回答了您的问题,请单击复选标记:)
【讨论】:
完美答案。感谢您的努力! :) 我不太明白这个答案。我想在我的 android 应用程序中使用 phone gap 和 node.js,但你是说 html5 地理位置和 web 套接字与 phone gap 不兼容.. 或者? 嗨,不,我没有提到地理位置,它在 PhoneGap 中运行良好。 PhoneGap 使用内置的 WebView 控件,它是一个嵌入式 Web 浏览器,可将您的 Html 和 Js 代码作为应用程序运行。该嵌入式浏览器没有 Html5 WebSocket 功能,因此您需要使用单独的插件,如 this one for Android 或 this one for iOS 以获得真正的 WebSocket。【参考方案2】:更新答案,此插件可与 socket.io 一起使用,并且更易于使用(仅限 PhoneGap 3.x)。
https://github.com/mkuklis/phonegap-websocket
【讨论】:
还有一个2.x.x版本【参考方案3】:这个存储库很快就会集成到 phonegap 中(至少在自述文件中听起来是这样的)
它还提供了在phonegap / android中使web sockets工作的步骤。
看一看:https://github.com/anismiles/websocket-android-phonegap
【讨论】:
我的问题可能不够彻底,但我知道这个存储库并且我已经尝试过了。问题是 Socket.IO 库让我别无选择覆盖 socket.onmessage 等方法。这反过来又使我无法将此存储库与我的代码一起使用。我想知道是否有可能结合 Android Phonegap Socket.IO 客户端应用程序实现 WebSockets。 我可能还不够彻底地研究这是否真的符合您的所有标准:)【参考方案4】:这是我目前正在评估的另一个 websockets Android 客户端。
http://jwebsocket.org/mobile/android/android_part1.htm
恐怕我不知道它是否对 phonegap 项目有用,不熟悉它。
Phonegap 需要允许您将外部 java 库合并到您的项目中,并且您需要在 java 中为它构建一个接口。
【讨论】:
以上是关于带有 Node.js/Socket.IO 服务器和客户端的 Phonegap 应用程序中的 Android 的 WebSockets的主要内容,如果未能解决你的问题,请参考以下文章
STOMP 上的重复事件 Socket.io 和 Node.js
我在集群 node.js/socket.io/redis pub/sub 应用程序中收到重复消息
使用 socket.io 在 Node.js 中使用 MySql 数据库进行 HTML5 页面日志记录