2017-12-12 6 views
0

배경에왔다 얼마나 오래 확인은socket.io - 사람이 방

그래서 난 내 게임 큐잉 시스템을 만들려고 해요. 나는 AI에 대항하여 잠시 기다려야 할 사람을 원한다. 나는 또한 비슷한 기술 수준의 상대를 상대하는 데 더 오래 기다린 사람들을 우선시하고 싶다. 나는 이것에 관해 갈 가장 좋은 방법을 궁금해하고 있었다. 인공 지능 할당을 위해 setTimeout을 설정하고 기다리는 시간을 확인할 수있는 UTC 시간을 설정해야합니까? 나는 그들이 일치하는 경우 나중에 어떻게 시간 제한을 취소 할 것인지 궁금 하네.

제한 시간 :

socket.on('waiting room', function (id) { 
    console.log("socket has joined the waiting room", id); 
    socket.join("waiting room") 
    setTimeout(function() { 
     socket.leave("waiting room") 
     socket.join("some ai game") 
    }, 60000) 
}) 
+0

clearTimeout(); 타임 아웃을 취소하는 방법 – Mehari

+0

@ 메 가리 잘 어떻게 알 수 있습니까? 변수에 변수를 할당하면 소켓 단위로 사용됩니까? –

답변

2

나는 가정 게임 서버 자원이 게임에서 제한되어, 다음 플레이어 기다려야합니다. 그래서 게임 서버를 사용할 수있을 때, 우리는 가장 오래 기다린 플레이어를 게임에 넣습니다. 그러면 논리는 아래처럼 보일 것입니다. 플레이어가 waiting room를 입력 할 때

const waitinglist = [] 
 

 
//user leave waiting 
 
const leaveWaiting = (socketid) => { 
 
    waitinglist = waitinglist.filter((x) => x.socket.id != socketid) 
 
} 
 

 
io.on('connection', (socket) => { 
 
    socket.on('waiting room', function(id) { 
 
    console.log("socket has joined the waiting room", id); 
 
    socket.join("waiting room") 
 
    waitinglist.push({ 
 
     socket, 
 
     time: new Date(), 
 
    }) 
 
    }) 
 

 

 
    //leave by themselves 
 
    socket.on('disconnect',() => { 
 
    leaveWaiting(socket.id) 
 
    }) 
 
    socket.on('cancle waiting',() => { 
 
    leaveWaiting(socket.id) 
 
    socket.leave("waiting room") 
 
    }) 
 
}) 
 

 
//leave by other logic, like match/ai server available 
 
matchResource.on('available', (resource) => { 
 
    const { 
 
    socket, 
 
    time 
 
    } = waitinglist.shift() 
 
    socket.leave("waiting room") 
 
    start_your_game(socket, resource) 
 
})

글로벌 waitinglist, 당신은 플레이어를 얻을 게임 서버를 사용할 수있을 때 그에게

을 대기열에, waiting-manager

같은 모듈 무언가로 교체 할 수 있습니다 대기열 위쪽에서 그에게 맡기십시오.

플레이어가 종료했거나 재생을 시작했는지, 대기열에서 제거했는지 여부