android - Android 上有选项可以将数据实时发送到服务器吗?

标签 android networking real-time

我目前正在开展一个小型项目,以证明某些功能有效,我目前有一个带有 Android SDK 的智能手环设备。

通过该设备,我使用 SDK 实时跟踪用户的心率。

所以我的 Android 应用程序会实时接收心率更新。

这相当容易做到,但我现在需要尽可能高效地将这些数据从 Android 设备实时发送到服务器。

从电池消耗开始是可以的,因为最初这只是一个概念证明。

我在向服务器实时发送大量数据方面经验有限,我想知道是否有人对 Android 上的最佳方法有什么想法?

我研究过同步适配器,但这些似乎更多的是为了保持客户端和服务器之间的数据对齐,这是我不关心的事情。另一种方法是看看 Volley 的 RequestQueue 是否可以工作,但我再次不确定是否值得研究这个?

我是否应该考虑创建一个服务并以某种方式使用套接字来传输数据?

编辑:看起来 IntentService 可能是处理任务执行的最佳选择,但我假设 http 请求对于客户端来说太重,我应该考虑其他传输方法?

最佳答案

我正在从事类似的项目,但我正在处理的腕带是 Empatica E4。请记住,我不是专家开发人员,因此我也期待对我的设计进行更正。此外,我将尽力一步一步地证明我的想法是正确的。我希望这能为您的申请提供一些提示,并对其他人有所帮助。

所以,我当前的架构看起来像;

System Architecture


首先,Empatica还提供了Android SDK来接收数据。 SF 代表采样频率,而 EDA、Temp、BVP 和 AccXYZ 是我腕带上的传感器。每个传感器具有不同的采样频率,最大值为 64 Hz,这使每个采样之间的间隔为 15 毫秒。这个时间间隔对于执行所有操作来说非常具有挑战性,因此我将传感器数据缓冲在 (Volatile LinkedBlockingQueue) FIFO 队列中,这样我就不会错过任何样本。这一切都是在我的应用程序服务中发生的。

现在,我有一个可运行任务,已与 ScheduledExecutorService 一起使用。以 250 毫秒的间隔从队列中收集样本(您可以根据需要更改它,但考虑到我的需求、网络延迟和设备性能,我使用了 250 毫秒)并将它们放入单个 JSON 对象中。此可运行任务收集的样本数量因每个传感器而异,其中 BVP:16 个样本、AccXYZ:8 个样本、Temp:1 个样本和 EDA:1 个样本。在输出中,我有一个 JSON 对象,其中包含要发送到我的服务器的数据。

为了将数据传输到我的服务器,我使用 HTTP POST 请求。原因是简单、快速、高效并且有利于并发。我正在使用Volley framework它将自行处理我所有的网络相关问题。所以我只需将 JSON 对象添加到 Volley RequestQueue 中,我的客户端就在这里完成了。正如您所提到的,您可以使用套接字连接来实现您的目标,但我必须使用多个设备,因此就我而言,套接字在实现并发方面可能存在问题。我还尝试使用 HttpURLConnection 手动完成此操作,但代码变得乏味且难以处理。

最后,我的服务器端有一个 REST API(Python 语言),它将处理 POST 请求、解析数据并将其插入到我的 MySQL 数据库中。到目前为止,我仍在研究这个 REST API 来解析数据并将其存储在数据库中。但是,我已经测试了我的应用程序,并且成功地将数据从我的设备接收到服务器。

关于您的问题“我是否应该考虑创建一个服务并以某种方式使用套接字来传输数据?”,如果您在单个设备上工作,那么这是一个很好的选择。如果有多个设备,我认为 Http 是更好的选择。

关于你的第二个问题,我认为 Http 对于客户端来说不会很重,而 Volley 会承担你所有的痛苦。你只需要创建一个请求队列,瞧!你可以找到很多很好的截击教程,我特别关注了this .

希望我的回答对您有一点帮助。

PS:由于我仍在研究这件事,而且还没有拿出最终产品,因此我不能确定其中涉及的风险,但如果有的话我会及时通知您有新的事情发生了。此外,我愿意接受任何有帮助的建议和想法。最后,上图不是很详细,我给你做的,只是为了分享我是如何处理同样的想法的。

关于android - Android 上有选项可以将数据实时发送到服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960499/

相关文章:

Android - 从动态创建的微调器中获取所选项目

web - 可用于 Web 的实时通信协议(protocol)有哪些?

node.js - 如何防止 node.js 中的流式 http/s 服务器内存泄漏?

android - EncodeDecodeMux - 三星设备 - 在 S6 Edge 和 S5 上测试

java - 安卓打开下载的文件

android - for循环使用原始音乐数组android

c++ - boost asio unix 套接字重用

c++ - cURL 是一个网络库吗?

android - 如何让 Android 设备在没有唤醒锁的情况下保持与互联网的 TCP 连接?

php - 两个不同MySQL数据库之间的转换