【问题标题】:Options on Android for real time sending of data to a server?Android上的选项用于实时将数据发送到服务器?
【发布时间】:2016-03-01 20:09:13
【问题描述】:

我目前正在做一个小规模的项目来证明某些东西是可行的,我目前有一个带有 Android SDK 的智能手环设备。

在这台设备上,我使用 SDK 实时跟踪用户的心率。

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

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

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

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

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

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

编辑:看起来 IntentService 可能是处理任务执行的最佳选择,但我假设 http 请求对客户端来说太重了,我应该寻找其他东西进行传输?

【问题讨论】:

  • 您是否尝试过 Pubnub、quickblox 和 parse 等实时服务之一?
  • 您好 Tony,谢谢,其中一些服务看起来很棒,我会在某个阶段对其进行研究,但现在我需要在不使用软件服务的情况下执行此操作。
  • 欢迎@donal 我建议你先看看 Pubnub 我已经在许多实时应用程序中使用过它,它很棒
  • 据我了解,您想手动实现实时功能?
  • 是的,我想知道将实时数据从 Android 发送到服务器的最佳做法。

标签: android networking real-time


【解决方案1】:

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

所以,我目前的架构是这样的;


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

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

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

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

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

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

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

PS:因为我还在做这件事,我还没有拿出最终产品,所以我不能确定它所涉及的风险,但如果我会及时通知你新的事情发生了。此外,我愿意接受任何可以提供帮助的建议和想法。最后,上图不是很详细,我给你做的,只是为了分享一下我是如何处理同样的想法的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    相关资源
    最近更新 更多