socket.io, svelte 및 node를 사용하여 멀티플레이어 영화 퀴즈/퀴즈 게임을 만들어 봅시다. 데블로그 #1

11313 단어 nodesveltedevlogwebdev

뒷이야기



redishackathon으로 정신이 산만해지기 전에 저는 영화 퀴즈/퀴즈 멀티플레이어 게임을 만드는 것에 대해 생각하고 있었습니다. 내가 시작한 유일한 것은 인터페이스가 작동하는 방식에 대한 몇 가지 실험을 하는 것이었습니다.

간략한 개요



아이디어는 themoviedb 또는 이와 유사한 API에서 데이터를 가져오고 다음과 같은 질문을 기반으로 하는 것입니다.
  • 순위 질문을 할 수 있는 가장 오래된 또는 유사한 데이터에서 출시된 연도의 이 3개 영화의 순위를 매깁니다.
  • 배우 x가 출연하는 영화를 고르세요.. 또는 어떤 종류든 하나의 데이터를 고르세요.

    인터페이스는 기본적으로 동영상 표지가 있는 이미지 행이며 마우스를 사용하여 순위를 매길 때 드래그하거나 하나를 선택할 때 선택할 수 있습니다. 모바일에서도 작업해야 합니다.

    스택



    프런트엔드: 날렵한
    백엔드: 노드
    통신: Socket.io

    나중에 구현하는 기능에 따라 redis/mongodb를 추가할 수 있습니다.

    계획



    나는 계획을 세우는 데 좀 서툴러서 지금은 계획이 없는 것처럼 그냥 바로 코딩하고 기본 작업이 작동하게 되면 나중에 약간의 계획을 세웁니다.

    일하러 가다



    이 devlogs는 각 명령 등을 보여주는 매우 상세하지 않습니다.

    백엔드



    그런 다음 새 노드 서버를 만들고 express 및 socket.io를 설치하십시오.
    기본적인 내용이므로 자세히 다루지는 않겠습니다.

    이제 서버를 설정합니다. 개발할 때 다른 포트에서 서버와 클라이언트를 실행하므로 cors를 사용해야 합니다.

    index.js

    const express = require('express');
    const app = express();
    const http = require('http');
    const server = http.createServer(app);
    const { Server } = require('socket.io');
    const path = require('path');
    
    
    //dev shite with cors support.. remember to change this later
    const io = new Server(server, {
        cors: {
            origin: ['http://localhost:5173', 'http://localhost:5174'],
            credentials: true,
        },
    });
    require('./eventHandler.js')(io);
    
    app.use(express.static(path.join(__dirname, 'public'))); //serve static files from the public folder so can run frontend on the same server
    
    server.listen(3000, () => {
        console.log('listening on *:3000');
    });
    module.exports = io;
    


    보시다시피 eventHandler 파일에 필요합니다. 이것은 모든 socket.io 정크가 가는 곳입니다. 물건이 너무 어수선해지지 않도록 분리된 상태로 유지하고 싶기 때문입니다.

    eventHandler.js

    module.exports = function (io) {
        io.on('connection', function (socket) {
            const count = io.engine.clientsCount;
            console.log(socket.id + ' connected c:' + count);
    
            socket.on('disconnect', () => {
                console.log(socket.id + ' disconnected');
            });
        });
    
        io.engine.on('connection_error', (err) => {
            console.log(err.req); // the request object
            console.log(err.code); // the error code, for example 1
            console.log(err.message); // the error message, for example "Session ID unknown"
            console.log(err.context); // some additional error context
        });
    };
    
    


    현재 이 파일에는 일부 콘솔 로그만 포함되어 있으므로 어떤 일이 발생하는지 확인하고 통신이 작동하는지 확인하십시오.

    프런트엔드



    새 svelte 앱을 초기화하는 것으로 시작합니다.

     npm create vite@latest client
    


    socket-io.client 설치

    npm install socket-io.client
    


    App.svelte에서 모든 것을 삭제하고 일부 코드를 삽입하십시오.

    <script>
        import { io } from 'socket.io-client';
    
        let connected = '';
    
        const socket = io('http://localhost:3000');
    
        socket.on('connect', () => {
            connected = 'We got a signal!';
        });
    </script>
    
    <main>
        <h1>{connected}</h1>
    </main>
    


    완료!
    일부 개발 서버를 시작하고 제대로 작동하는지 확인하세요!



    빵! 작동합니다. 또한 연결 및 연결 해제 시 노드에서 console.logs를 가져오므로 좋습니다.

    지금은 뒹굴뒹굴.. 지금 자야지..! 계속하려면..
  • 좋은 웹페이지 즐겨찾기