每秒发送数据时处理数据连接中断的最佳做法

时间:2016-08-02 10:40:45

标签: android mysql json csv

我有一个移动应用程序,每秒都会检索纬度,经度,速度......等等。

此应用程序将这些值存储在.csv文件中,并使用DATA连接将它们发送到远程服务器(使用JSON格式化它们)。服务器(Apache,MySQL)检索数据并将其放入数据库中。然后,用户可以在网站上进行连接,例如使用GM生成跟踪,或生成统计信息(平均速度......)。

但有时,由于景观(山脉),数据连接失败。因此,即使移动设备继续存储数据,服务器也不再接收数据。

当数据连接再次起作用时,到目前为止,服务器收到最后一个位置。所以这两个职位之间存在差距。

发送适当数据以填补这一空白的最佳方法是什么?

  • 在应用程序端,始终测试数据是否丢失,如果是,请将其存储在单独的csv文件中?
  • 然后发送这个csv?
  • 或发送JSON数组?

2 个答案:

答案 0 :(得分:1)

有一个应用程序做同样的事情(除了我使用数据库而不是csv),我建议你发送数据包。每秒发送数据会耗尽电池电量。我根据需要每分钟或更长时间发送数据。

对于您的问题,在每次调用(HTTP POST)时,我创建一个JSONArray,其中包含要发送的每个位置。我在数据库中标记数据,其状态是知道哪一个被正确发送(0 =未发送,1 =已发送)。状态取决于请求的StatusCode。

数据库将通过收听GPS跟踪器的服务进行实时填充,状态为0。

在下一个电话中,我将选择每个未发送的数据。我更喜欢使用JSON格式,因为我的服务器知道如何阅读它,但这不是优先选择。

答案 1 :(得分:0)

我认为没有"将军"对于这种情况的解决方案,大多数时候你必须找到适合你的最佳解决方案,但我会做的是以下内容,具体取决于服务器端实现:

  1. 创建一个存储所有信息的对象,例如" Positions"可以序列化为json并存储在本地。

  2. 在发出请求之前,请更新存储数据的对象并保存。

  3. Wen你发起请求使用你的自定义对象作为"数据"为您的服务器。

  4. 如果请求成功,请清除所有已存储的数据(已经发送)。

  5. 如果请求失败,则不执行任何操作......下次会发送数据。

  6. 如果您想更精确,可以检查请求错误的原因,如果它不是超时并且是服务器问题,您可以将数据集标记为失败并使用一个计数器,用于对失败的数据进行最大重试,如果达到最大重试次数,则删除失败的数据,这可能是您侧面的数据结构上的错误,可能会阻止向服务器发送良好的数据。