Запуск действия на нескольких устройствах одновременно - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь запустить действие в приложении Android на нескольких устройствах одновременно (или с наименьшей возможной задержкой / сдвигом).

Устройства очень похожи (марка, модель,версия), подключен через USB к Macbook Pro. У меня пока есть 4 устройства, но окончательное решение будет включать в себя еще много, поэтому мне нужно решение, которое работает со многими устройствами.

Я пытался использовать сокеты (Socket.io и обычный WS) через Wi-Fi и USB, но задержка немного увеличивается для каждого устройства, поэтому действие не запускается синхронно.

Я также пытался отправить широковещательный пакет UDP через USB, это дает лучшие результаты, но кажется очень противоречивым: максимальная задержка исходит отОт 10 до 100 мс.

Синхронизация часов была еще одним вариантом, который я рассматривал, но не уверен, насколько точным он может быть на многих устройствах (а NTP кажется сложным для Android)

Любая идея или шаблон для решениятакого рода требования? Спасибо!

1 Ответ

1 голос
/ 12 ноября 2019

первые некоторые наблюдения:

  1. мобильные устройства имеют тенденцию агрессивно отключать сетевые карты для экономии энергии (я не уверен, насколько это зависит от того, заряжаются ли они в настоящее время)
  2. они также снижают частоту своего процессора, если они не используются, и может потребоваться некоторое время (то есть, миллисекунды), чтобы вернуть их к скорости. учитывая, что все ваши устройства "одинаковы", дисперсия в ваших измерениях, вероятно, будет зависеть от других приложений, которые также запускают
  3. . Измерение задержки в ответах приложений кажется нетривиальным, выполнение этого через сеть может увеличить дисперсию, потому чтовсе устройства конкурируют друг с другом (обратите внимание, что USB - это «последовательная шина», так что это применимо и здесь). в зависимости от того, насколько это важно, возможно, стоит установить видеокамеру и посмотреть на их экраны

, которые говорят, что у меня будет соблазн положиться на их часы, чтобы сделать это. Синхронизация NTP может быть отличной (например, точность до миллисекунды довольно проста), но, вероятно, не для мобильных устройств (я бы предположил, что NTP-клиенты Android больше заботятся о мощности, а для людей все, что меньше, чем несколько секунд, подойдет). Тем не менее, их часы должны быть довольно стабильными, поэтому ваши клиенты должны регистрироваться (случайным образом, чтобы уменьшить конкуренцию в сети, и сделать это несколько раз, чтобы сетевой адаптер был правильно включен). клиенты могут использовать это, чтобы выяснить, как долго до «события», а затем спать в течение нескольких миллисекунд до этого. затем они могут проснуться и выполнить цикл проверки занятости (чтобы убедиться, что процессор включен), а затем продолжить в соответствующее время

...