附近的API-有效负载排队

时间:2018-11-15 01:59:44

标签: google-nearby

我有一个用例,其中我将控制数据从AndroidThings设备发送到Android手机-这是每秒10次周期性读取电压,因此每100毫秒。 但是,由于这是“附近API”功能-允许发送有效载荷:

  

发件人使用sendPayload()方法发送有效载荷。该方法可以多次调用,但是由于我们保证按顺序交付,因此第二个有效载荷将一直排队等待发送,直到完成第一个有效载荷为止。

在我的情况下,实际情况是,基于传输速度变化的事实,我正在通过延迟获取电话中的读数,只是队列越来越大。

任何想法如何克服这个问题?基本上我不需要按订单交货。 我的第一个想法是对负载进行某种确认,只有在确认接收后,才应将第二个负载发送给接收者。

感谢创意

更新:

STREAM类型的有效负载是一种完美的解决方案。如果InputStream传输了一组以上的读数(读数包括电压,最大电压等共32个字节的数据),那么我将使用skip方法跳转到最后一个读数。

2 个答案:

答案 0 :(得分:1)

对于您的用例,我建议使用STREAM Payload,然后您可以继续在单个有效负载上流式传输控制数据-这正是我们创建STREAM的用例之一。 :)

答案 1 :(得分:0)

是的,您的第一个想法听起来像是正确的做法。无法关闭“附近的连接”内部按顺序传送负载,因此您必须自己处理掉负载。

我将建立一个可缓存“最新电压”的类。当您获得新的读数时,该值每次都会覆盖自身。

private volatile Long mostRecentVoltage;

public void updateVoltage(long voltage) {
  if (mostRecentVoltage != null) {
    Log.d(TAG, String.format("Dropping voltage %d due to poor network latency", mostRecentVoltage));
  }
  mostRecentVoltage = voltage;
}

然后添加另一条逻辑,该逻辑将在每次成功发送先前的有效负载时获取缓存的值。

@Nullable
public Long getVoltage() {
  try {
    return mostRecentVoltage;
  } finally {
    mostRecentVoltage = null;
  }
}