2014-12-08 1 views
0

새 웹 사이트가 website.com/NewPage에 생성되었습니다. 이 페이지의 비디오를 생성하는 데 20 초 만에 시작하고 싶습니다.자바 스크립트의 글로벌 타이머

지금은 setTimeout 기능이 있으며 20 초 후에 비디오가 시작됩니다. 문제는 각 사용자가 연결할 때 20 초 타이머가 시작된다는 것입니다. 제 목표는 웹 사이트를 만드는 것입니다 페이지가 생성 된 후 20 초 후에, 모두입니다. 다음은 예입니다.

사용자 A은 페이지 생성 후 3 초 이내에 website.com/NewPage에 들어갑니다. 사용자 B은 페이지를 생성 한 지 15 초 이내에 website.com/NewPage에 들어갑니다.

5 초 후 사용자 B 연결, 사용자 A 님의 동영상이 시작됩니다. 사용자 B은 5 초이며 비디오가 시작될 때까지 15 초 동안 기다려야합니다.

내 목표는 20 초 전에 합류하는 한 (20 초 후에 다른 사람이 참여할 수없는 한) 정확히 모든 사람이 비디오를 시작할 수 있도록하는 것입니다.

따라서 사용자 B이 (가) 늦게 참가하더라도 모든 사람에게 정확히 동일한 시간에 시작됩니다.

+0

"페이지가 생성되었습니다"란 무엇을 의미합니까? 타임 아웃이 여러 사용자에게 어떻게 영향을 줄 수 있습니까? 클라이언트 측에 있지 않습니까? 그렇다면 서버가 비디오를 시작하는 방법은 무엇입니까? – Bergi

답변

0

서버에서 조정되어야합니다. 긴 폴링을 사용하여 태그를 지정 했으므로 사용중인 서버 통신 기술이라고 가정합니다. 새 페이지에 대해 첫 번째 긴 폴링 연결이 열리면 서버에서 타이머를 시작하십시오.

+0

코드 예제를 게시 할 수 있습니까? –

+0

글쎄, 백엔드 서버 스택은 무엇입니까? – Segfault

0

다른 사용자들 사이에서 타이머를 공유하고 있으므로, 백엔드에서 타이머를 유지해야한다고 생각합니다. 프론트 엔드 자바 스크립트에서는 각 사용자 (로컬 브라우저에서)마다 별도의 타이머를 유지 관리해야합니다.

말, 프런트 엔드 어쩌면 코드 : 백엔드 코드에서

var timer = null; 
document.onload = function() { 
    $.ajax({ 
     url: '/server/timer', 
     type: 'get', 
     data: {userName: 'user A'} 
    }).done(function (res) { 
     if (res.remaining && res.remaining >= 0) { 
      alert('Hi, please wait for ' + res.remaining + ' seconds to start playing video'); 
      timer = setTimeout(function() { 
       // play the video 
      }, res.remaining * 1000); 
     } else { 
      alert('Sorry, you cannot watch the video now'); 
     } 
    }); 
} 

가 있는지 카운트 다운을 만들기 위해 API /server/timer을 유지 모든 사용자에 대해 동일합니다.

+0

아약스를 사용하지 않고도 할 수 있습니까? 나는 그들이 이것을하는 더 쉬운 방법이어야한다고 느낀다. –

+0

@AjaxjQuery 다른 방법이 없다고 생각합니다. 10 명의 사용자가있는 이미지는 매 2 초마다 사이트를 방문합니다. 그런 다음 각자에게 그에게 알릴 수있는 메커니즘이 필요합니다. '이봐, 너의 비디오는 9 초 만에 시작된다.' 그 숫자가 '9'라는 것을 어떻게 압니까? 어떻게 든 번호를 유지해야합니다. – Joy