2012-03-07 6 views
2

그래서 node.js에서 실시간 게임을 개발 중입니다. Redis와 Sockets.io도 사용하고 있습니다. 플레이어를 로비에 만들고 조인 할 수 있습니다 (게임 전 대화방과 같은 대화방에서 플레이어와 대화하고 게임 설정을 선택할 수 있습니다). 클라이언트는 HTML/CSS/JS로 작성되었습니다. 어쨌든 플레이어가 로비에서 끊을 때 인터페이스에 참가한 플레이어의 수를 업데이트하고 플레이어 이름을 합친 것을 알 수 있기를 바랍니다. 나는 생각했다nodej에서 어떤 사용자가 온라인 상태인지 추적하는 가장 좋은 방법은 무엇입니까?

두 가지 옵션이 있습니다 : 그것은 시간의 X 금액에 업데이트되지 않은 경우

  1. 레디 스 '키 값 타임 아웃 기능을 사용하여이 특정 필드를 제거 할 수 있습니다. 그런 다음 호스트가 DC를 확인하기 위해이 필드의 존재를 확인하게합니다. 많은 사용자가 잠재적으로 재생할 수 있기 때문에 이것이 비효율적인지 아닌지 궁금해합니다. 따라서 redis에서 많은 시간 초과 값과이 필드를 폴링하는 다른 많은 사용자가있는 것이 좋지 않습니다.

  2. ('disconnect', ..)의 sockets.io를 사용하여 필드를 업데이트 할 수 있습니다. 그러나 예를 들어 사용자가 PC가 정지하면이 이벤트가 실행되는지 확실하지 않습니다.

어쨌든 다른 아이디어도 열려 있습니다.

답변

3

Socket.io에는 아직 연결 상태를 확인하는 '하트 비트'가 있습니다. 기본 하트 비트 제한 시간은 15 초입니다. this wiki에서 구성하는 방법에 대해 자세히 읽을 수 있습니다. 하트 비트가 실패하면 (사용자 PC가 멈춤) socket.io는 'disconnect'이벤트를 내 보냅니다.

3

Socket.io로 충분합니다. configure it to use heartbeats으로 소켓을 핑 (ping)하고 상태를 점검 할 수 있습니다. 사용자의 컴퓨터가 정지하면 실제로 이러한 하트 비트에 응답 할 수 없으므로 강제로 연결 해제됩니다.

이것을 테스트하려면 하트 비트를 사용하도록 Socket.io를 설정 한 다음 다른 컴퓨터의 브라우저를 통해 연결하십시오. 브라우저에서 과거의 무한 루프가 진행되는 동안. 정지를 시뮬레이션합니다.

+0

맞아요, 그렇다고해서 순간에도 '연결 끊김'이벤트가 해고당하는 것입니까? (구성되어있는 시간이 15 초/시간을 기다려야하는 경우에도) –

관련 문제