2009-07-01 5 views
4

저는 P2P 프로젝트에 GameKit을 사용하기 시작했으며 두 클라이언트 모두에서 동시에 함수를 호출하려고합니다. 시계가 정확히 같은 시간대로 설정되지 않았다고 가정하면 NSTimer를 호출하여 다른 클라이언트에서 동시에 함수를 호출 할 수 있습니다.여러 iPhone에서 동시에 함수를 호출하는 방법은 무엇입니까?

감사합니다.

+3

정말 그렇게 할 수 없습니다. 일반적으로 클라이언트가 어떤 종류의 서버에 연결되어 있으면 하트 비트를 유지하고 클라이언트에게 동기화로 뭔가를 수행하라는 메시지를 보냅니다. 전용 서버를 보유 할 수없는 경우 P2P 클라이언트 중 하나 (일반적으로 "호스트")가이 기능을 수행하고 다른 사람에게 특정 방법을 실행할시기를 알려줍니다. –

+0

고마움 .. 명확히하기 위해, 나는 호스트에게 클라이언트에게 '언제'라고 말하고 클라이언트와 서버에서 동시에 실행되도록하는 방법을 알아 내려고하고있다. 그래서 오후 5시 25 분 1시에 함수를 실행하고 다른 함수는 오후 5시 24 분 37 초에 함수를 실행합니다. – John

답변

3

블루투스를 통해 연결된 두 장치 사이에있는 경우 하나를 마스터 클럭으로 할당하고 다른 하나를 슬레이브로 할당 할 수 있습니다. 처음 연결되면 마스터는 현재 시간을 보냅니다. 슬레이브는 자신의 클럭과 서버 사이의 델타를 계산하기 위해 이것을 사용할 수 있습니다. 그런 다음 델타에 의해 타이머를 상쇄하고 타이머를 설정하기 위해 해당 값을 사용합니다 (마스터는 자체 시계를 사용하고 클라이언트는 자체 시계 +/- diff/마스터 클럭을 사용합니다). 그렇게하면 양측이 서로 상대적인 동기화 상태가됩니다.

또 다른 옵션은 서버 (또는 절대 시간 값이 필요한 경우 NIST)에서 시간을 얻고 현재 iPhone 시간과 서버 시간 사이의 델타를 계산하는 것입니다. 일단 당신이 그것을 가지고, 당신은 혼자 현지 시간에 의존하지 않지만 항상 델타에 의해 그것을 상쇄.

이것은 상당히 정확하지만 네트워크 전송 지연을 허용하지 않습니다. 정확한 밀리 초로 내려야 할 필요가 있다면 격차를 좁히는 데 도움이되는 일종의 평균 네트워크 지연을 계산하려고 노력해야 할 것입니다.

0

가장 좋은 방법은 두 클 라이언트를 쿼리하여 두 클럭 시간을 구한 다음 시간차를 계산하여 최종적으로 각 클라이언트에 맞춤 시간을 보내는 서버를 갖는 것입니다.

0

정말 큰 문제는 다음과 같습니다. 왜이 작업을 수행해야합니까? 솔직히 말해서, 그것은 거대한 고통이며 "양 당사자가 동시에 똑같은 일이 일어나는 것을 본다면"한 당사자를 "서버"로 만들고 다른 당사자들에게 행동을 시작하라고 지시하는 것이 더 쉽습니다. 네트워크 대기 시간 (아마도 수십 밀리 초)에 따라 다를 수 있습니다.

관련 문제