2009-07-01 2 views
4

Я начинаю использовать GameKit для проекта p2p, и я хочу одновременно вызвать функцию на обоих клиентах. Предполагая, что их часы не установлены точно в одно и то же время, как я могу вызвать NSTimer или что-то еще, чтобы моя функция вызывалась одновременно на обоих клиентах?Как я могу вызвать функцию одновременно на нескольких iPhone?

Спасибо!

+3

Вы не можете этого сделать. Как правило, у вас бывают клиенты, подключенные к серверу какого-то типа, и это будет иметь сердцебиение и отправить сообщение клиентам, чтобы что-то сделать в синхронизации. Если у вас не может быть выделенный сервер, то один из клиентов P2P (обычно это «хост») выполнит эту функцию и скажет всем остальным, когда выполнить какой-либо метод. –

+0

Спасибо .. уточнить, я пытаюсь выяснить, как заставить хост сказать клиенту «когда» и одновременно выполнить выполнение на клиенте и сервере. Так что, возможно, один запускает функцию в 5:25:01, а другой запускает функцию в 5:24:37 или что-то еще. – John

ответ

3

Если это только между двумя устройствами, подключенными через Bluetooth, вы можете назначить их как главные часы, а другие - как подчиненные. При первом подключении мастер отправляет свое собственное текущее время. Ведомый может использовать это для вычисления дельта между своими часами и сервером. Затем он будет смещать любые таймеры по дельтам и использовать это значение для установки таймера (мастер использует свои собственные часы, клиент имеет собственные часы +/- diff w/master clock). Таким образом, обе стороны находятся в относительной синхронизации друг с другом.

Другой вариант - получить время с сервера (или NIST, если вам нужны абсолютные значения времени), затем рассчитать дельта между текущим временем iPhone и временем сервера. Как только вы это сделаете, вы не полагаетесь только на местное время, но всегда компенсируете его дельтой.

Это достаточно точный, но не допускает задержки передачи по сети. Если вам нужно быть точным до миллисекунды, тогда вам, возможно, придется полюбить себя и попытаться вычислить некоторую среднюю задержку сети, чтобы помочь закрыть пробел.

0

Лучшим способом было бы иметь сервер, который запрашивает оба клиента, чтобы получить их часы, а затем рассчитать разницу во времени и, наконец, отправить индивидуальное время каждому клиенту.

0

Действительно, главный вопрос: зачем вам это нужно? Честно говоря, это огромная боль, и если это так, то обе стороны видят, что одно и то же происходит одновременно », то, вероятно, на порядок проще просто, чтобы одна сторона была« сервером »и говорила другим сторонам инициировать действие, которое будут отличаться за счет задержки в сети (вероятно, несколько минут).

Смежные вопросы