2017-10-15 4 views
2

웹 응용 프로그램 빌드.다른 사용자가 사용하는 자원의 가용성을 확인하십시오.

사용자가 자신의 브라우저에서 서버의 공유 리소스 호스트에 액세스 할 수 있지만 UserA가 이미 Resource1을 사용하고 있으면 UserA가 Resource1을 릴리스하거나 지정된 시간까지 ResourceB를 사용할 수 없어야합니다.

이 부분의 경우 : 튜플 목록 (resource, currentuser)이있는 MySQL 테이블을 사용하고 만료 된 튜플을 삭제하는 cron 작업을 실행하기로했습니다.

이제 UserB가 Resource1에 액세스하려고한다는 사실을 UserA에 알릴 수 있기를 원합니다. UserA에서 응답을 얻지 못하면 UserA는 Resource1에 대한 잠금을 해제 한 다음 UserB에서 리소스를 사용할 수 있습니다.

이 부분에서는 AJAX를 사용해야합니다. 나는 다음 해결책에 대해 생각했다 :

사용자의 브라우저 그가 살아 있고 있음을 증명하기 위해 주기적으로 AJAX 호출을한다. (매분마다) 호출 할 때 다른 사용자가 동일한 자원을 요청했다면 그는 서버에 도전해야한다. 주어진 시간 내에 요청 (예 : 보안 문자). 챌린지가 실패하면 사용자가 더 이상 존재하지 않음을 의미합니다 (브라우저를 열어 두거나 웹 페이지를 펼친 상태로 두었을 수도 있음).

까다로운 부분은 "주어진 시간 내에 서버 요청에 도전해야합니다 (예 : 보안 문자)"입니다. 그렇게하는 방법?

최상의 경로를 따르고 있습니까?

답변

1

예, 개요는 잘되었습니다. 아약스를 사용하는 것은 또한 완벽합니다. 특히 매분마다 단순히 폴링하는 경우 특히 그렇습니다.

예를 들어, 다음과 같은 당신이 가정 해 봅시다 : 자원에 액세스 할 수있는 새로운 요청을 처리 할 때

setInterval(function() { 
$.get('/resource/status', function(response) { 
    if (response.data.newRequest) { 
     //This would signal a new request to the resource 
    } 
}) 
}, 60000) 

, 당신은 reCaptcha 및 디스플레이 같은 것을 사용할 수있는 그러나 적절한 (오버레이 또는 인라인). 이 작업을 수행 할 때 할당 된 시간을 초과했는지 여부를 확인하기 위해 타이머를 시작할 수도 있습니다.그렇다면 다른 Ajax 요청을 수행하고 리소스에 대한이 사람의 액세스 권한을 취소하거나 처리 할 수 ​​있습니다.

0

웹 소켓을 사용하여 리소스를 가져와야하는 모든 사용자를 제어 할 수 있습니다. 이 방법을 사용하면 연결된 사용자를 확인하고 리소스를 사용할 수 있으며 사용이 끝나면 다음 사용자에게 리소스를 할당 할 수 있습니다. (이 방법은 각 사용자에게 시간이 얼마나 걸릴지 추정 할 수 있습니다 리소스를 가져와 진행률 표시 줄을 수행하십시오.)

0

여기 두 가지 문제가 있다고 생각합니다.

  1. 자원을 사용할 수 있음을 사용자에게 알리는 방법은 무엇입니까? 정기적 인 AJAX 요청은 괜찮지 만 대기중인 사용자에게 실시간으로 알림을 보내기 위해 긴 폴링 또는 웹 소켓을 고려할 수도 있습니다.

  2. 사용자가 리소스를 사용하고 있음을 확인하는 방법은 무엇입니까? 사람이 페이지에서 아무 것도하지 않는 순간을 포착하려면 마우스 동작/클릭 또는 키보드 버튼 누름을 추적 할 수 있습니다. 마지막 n 분 동안 아무 작업도 수행되지 않으면 페이지가 비활성으로 간주 될 수 있습니다. 페이지가 자동화 된 소프트웨어에 의해 악용되지 않도록하려면 리소스가 사용되는 n 분 안에 한 번만 captcha를 채우도록 요청할 수 있습니다.