[javascript] Socket.io를 사용하여 실시간 퀴즈 게임을 어떻게 구현할 수 있나요?

Socket.io는 JavaScript로 작성된 실시간 웹 소켓 라이브러리로, 클라이언트와 서버 사이에서 양방향 통신을 가능하게 합니다. 이를 활용하여 실시간 퀴즈 게임을 구현할 수 있습니다. 아래는 Socket.io를 사용하여 실시간 퀴즈 게임을 구현하는 간단한 예시 코드입니다.

  1. 서버 측 코드
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIO(server);

// 퀴즈 문제와 정답 리스트
const questions = [
  {
    question: '가장 많이 사용하는 프로그래밍 언어는 무엇인가요?',
    answer: 'JavaScript',
  },
  {
    question: '웹에서 페이지 구조를 정의하기 위해 사용하는 언어는 무엇인가요?',
    answer: 'HTML',
  },
  // 추가적인 퀴즈 문제들...
];

let currentQuestionIndex = 0;

io.on('connection', (socket) => {
  console.log('새로운 클라이언트가 접속했습니다!');

  // 클라이언트가 접속하면 현재 퀴즈 문제를 보내줌
  socket.emit('question', questions[currentQuestionIndex].question);

  // 클라이언트로부터 정답을 받았을 때 처리
  socket.on('answer', (userAnswer) => {
    const correctAnswer = questions[currentQuestionIndex].answer;

    if (userAnswer === correctAnswer) {
      socket.emit('result', '정답입니다!');
    } else {
      socket.emit('result', '오답입니다!');
    }

    // 다음 퀴즈 문제로 이동
    currentQuestionIndex++;
    if (currentQuestionIndex >= questions.length) {
      currentQuestionIndex = 0; // 퀴즈 문제가 마지막일 경우 다시 처음부터 시작
    }

    // 다음 퀴즈 문제를 클라이언트로 보내줌
    socket.emit('question', questions[currentQuestionIndex].question);
  });
});

server.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행 중입니다...');
});
  1. 클라이언트 측 코드
<!DOCTYPE html>
<html>
<head>
  <title>실시간 퀴즈 게임</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
</head>
<body>
  <h1>실시간 퀴즈 게임</h1>
  <div id="questionContainer">
    <!-- 퀴즈 문제가 보여질 곳 -->
  </div>
  <input type="text" id="answerInput" />
  <button onclick="submitAnswer()">정답 제출</button>
  <div id="resultContainer">
    <!-- 정답 여부가 보여질 곳 -->
  </div>

  <script>
    const socket = io('http://localhost:3000');

    // 서버로부터 퀴즈 문제를 받았을 때 처리
    socket.on('question', (question) => {
      const questionContainer = document.getElementById('questionContainer');
      questionContainer.innerText = question;
    });

    // 서버로부터 정답 여부를 받았을 때 처리
    socket.on('result', (result) => {
      const resultContainer = document.getElementById('resultContainer');
      resultContainer.innerText = result;
    });

    // 정답 제출 버튼 클릭 시 처리
    function submitAnswer() {
      const answerInput = document.getElementById('answerInput');
      const userAnswer = answerInput.value;

      socket.emit('answer', userAnswer);

      answerInput.value = ''; // 정답 입력 필드 초기화
    }
  </script>
</body>
</html>

이 코드는 간단한 퀴즈 게임을 구현한 예시입니다. 서버에서는 퀴즈와 정답 리스트를 관리하고, 클라이언트에서는 퀴즈 문제를 보여주고 정답을 입력받아 서버로 전송하는 역할을 합니다. 서버는 정답을 확인하여 클라이언트에게 결과를 전송하고, 다음 퀴즈로 넘어갑니다.

위 코드를 실행하면 클라이언트가 localhost:3000으로 접속하고 퀴즈 게임이 시작됩니다. 이후에 다른 클라이언트도 접속하여 같은 퀴즈 게임에 참여할 수 있습니다.

Socket.io를 이용하면 실시간으로 데이터를 주고받을 수 있기 때문에, 다양한 실시간 기능을 구현할 수 있습니다. 위 예시 코드를 기반으로 여러분의 퀴즈 게임을 발전시켜보세요!