附近 API - 有效负载排队

Nearby API - queuing of payloads

我有一个用例,我将控制数据从 AndroidThings 设备发送到 Android 移动设备 phone - 它是每秒 10 次的周期性电压读取,所以每 100 毫秒。 但由于这是 Nearby API 功能 - 关于发送有效载荷:

Senders use the sendPayload() method to send a Payload. This method can be invoked multiple times, but since we guarantee in-order delivery, the second Payload onwards will be queued for sending until the first Payload is done.

我的实际情况是,基于传输速度变化的事实,我在 phone 上获得的读数随着延迟的增加而增加,只是队列变得越来越大。

有什么办法可以克服这个问题吗?基本上我不需要按顺序交货。 我的第一个想法是对有效负载交付进行某种确认,只有在确认收到后,才应将第二个有效负载发送给收件人。

谢谢你的想法

更新:

STREAM类型的payload是一个完美的解决方案。如果 InputStream 传输不止一组读数(读数包括电压、最大电压等总共 32 个字节的数据),那么我使用 skip 方法跳到最后一个读数。

是的,您的第一个想法听起来很正确。无法在 Nearby Connections 中关闭按顺序传送有效载荷,因此您必须自己处理丢弃有效载荷。

我会构建一个 class 来缓存 'most recent voltage'。当您获得新读数时,此值每次都会自行覆盖。

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;
  }
}

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