服务器有没有办法将一些数据无线无缝地推送到客户端,可能是 Windows(电话)、iPhone、Mac 或 Android 设备,而无需任何操作系统集成?
如果是这样,最好的设计模式是什么,最好的技术是什么?
服务器有没有办法将一些数据无线无缝地推送到客户端,可能是 Windows(电话)、iPhone、Mac 或 Android 设备,而无需任何操作系统集成?
如果是这样,最好的设计模式是什么,最好的技术是什么?
如果“操作系统集成”是指“为每个平台编写特殊代码”,那么答案是否定的。
正如您所提到的,您想要文件系统访问和后台处理。目前,该组合无法以跨平台方式使用。
如果通过“操作系统集成”您的意思是“无需等待 apple/google/ms 提供该功能”,那么答案是肯定的/也许。
所有流行的平台都支持推送通知和后台处理,只要您按照每个特定平台的预期方式对其进行编码。
但是文件系统访问将受限于平台对您的限制。例如,在 ios 和 win8(phone) 中,无法在您自己的应用程序私有文件结构之外写入或读取文件。出于安全原因,您无法访问其他应用程序的文件系统。
更新:
这里的一般模式是为您想要支持的每个平台发布一个应用程序。该应用程序将在其各自平台的推送通知服务中注册自己。
您将编写通用服务器端代码来接受要推送到所有客户端设备的数据。然后,您将为您支持的每个平台调用相应的推送 API,从而唤醒客户端设备并触发您提供的应用程序进行响应。
当应用程序打开时,您让应用程序联系您的服务器并下载完整数据“推送通知只是您应用程序的唤醒电话”
通过这种方式,您可以轻松判断哪些设备是如何接收数据的。
每个平台特定的应用程序必须将数据保存到其自己的本地存储中,并提供一种通过其各自平台支持的方法共享数据的方式。
在 IOS 上,它可以像支持“Open In..”范式一样简单。在 W8Phone 上,您必须通过可用的“共享合同”之一发布数据,等等,以用于您想要支持的每个平台。
这是目前的一般模式。有一些警告。在 IOS 上,应用程序不会在收到推送通知时自动启动。这意味着您的应用程序只会在用户打开应用程序时下载全部数据。
移动应用程序通常也不能在后台无限期运行。这意味着一旦应用程序启动,您的应用程序将有一个有限的窗口来自动处理推送通知。在允许的“背景时间”之后。应用程序将关闭并且设备上的任何推送通知都会发出哔哔声,但在用户点击其中一个通知或直接打开应用程序之前不会打开应用程序。
推送技术只是服务器发起数据传输的一种方法,而不是客户端向服务器请求它。
Apple 通过在操作系统中提供此类内置功能,使推送技术相对易于使用。以及 Android 通过Google Cloud Messaging for Android。但是,Windows 没有。
Apple 推送通知和 Google 针对 Android 的消息传递似乎是操作系统需要处理的神奇和/或功能;但是,情况不一定如此。将其“集成”到操作系统中的优势与让框架为您处理功能相同。
用技术术语来说,推送技术是从客户端到接受消息的服务器的长期连接。这些消息将被视为推送消息,因为客户端没有单独请求它们。
在自己实施推送技术时要记住的主要事情是,客户端负责尽可能地保持该长期连接的活动。由于客户端 IP 地址可以在断开连接之间更改,因此服务器不能保证客户端的地址在断开连接之间保持不变。此外,客户端可以从防火墙后面连接,从而使服务器无法访问客户端。
相比之下,拉取技术是客户端连接到服务器并请求数据的更传统的过程。
对于 Apple iOS,您最好的选择是使用他们的推送通知服务。
对于 Android 设备,您应该使用适用于 Android 的 Google Cloud Messaging。或者,您可以创建自己的后台服务来处理消息;这是一个指南。
对于 Windows(至少是桌面),您必须创建自己的服务来执行此类任务。这是MSDN 指南,解释了如何使用 Visual Studio(VB 和 C#)创建 Windows 服务。可能已经构建了在 Windows 上处理此类消息传递的框架,但是,我不知道。
如果您想在服务器和客户端之间接收和发送实时通信(无论设备或操作系统如何),我强烈建议您使用 XMPP 技术,因为它专为您所要求的事情而设计。
可扩展消息和存在协议 (XMPP) 是可扩展标记语言 [XML] 的应用程序配置文件,它能够在任何两个或多个网络实体之间实现结构化但可扩展数据的近实时交换。[XMPP‑CORE] 中定义的 XMPP 的核心特性为许多类型的近实时应用程序提供了构建块,这些应用程序可以通过发送特定 XML 命名空间限定的应用程序特定数据而在核心之上分层。
http://xmpp.org/rfcs/rfc6121.html#intro - 这是最新的 RFC,它将为您提供一个很好的起点。
为什么不使用网络服务?在我之前的项目中,我使用 webservice 从 mysql 数据库传递数据。我使用的网络服务是 nusoap。在客户端,我使用了 Android 的 kSoap 库。希望这可以帮助。
从技术上讲,您可以使用XMPP Libraries,它用于实现聊天系统(msn、gtalk、facebook 聊天等),但这可以作为推送消息系统很好地工作,因为它是开源的并且可以很好地处理您的所有情况从来没想过。您也可以托管自己的服务器并以这种方式发送推送消息......