본문 바로가기

JavaScript

Web Socket 채팅방 만들기_1

728x90

Web Socket 채팅방 만들기_1


WS 이용

 

📌 package.json

npm init -y

 

📌 package.json

{
	...
    "version": "0.0.1",
    "description": "GIF 웹소켓 채팅방",
    "main": "app.js",
    "scripts": {
    "start": "nodemon start",
    },
}

 

📌 .env

COOKIE_SECRET = gitchat

 

📌 install Library

npm i cookie-parser dotenv express express-session morgan nunjucks && npm i -D nodemon
npm i ws

📄 app.js

const webSocket = require("./socket");

const server = app.listen(app.get('port'), () => {
    console.log(app.get('port'), '빈 포트에서 대기 중');
});

webSocket(server);

 

📄 socket.js

const webSocket = require('ws');

module.exports = (server) => {
    const wss = new webSocket.Server({ server });

    wss.on('connection', (ws, req) => {
        const ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress;
        console.log('새로운 클라언트 접속', ip);
        ws.on('message', (message) => {
            // 메세지는 buffer라 우리가 읽을 수 있도록 string타입으로 전환
            console.log(message.toString());
        })
        ws.on('error', console.error);
        ws.on('close', () => {
            console.log('클라이언트 접속 해제', ip);
            clearInterval(ws.interval); // 연결 끊기면 3초마다 보내는것도 끓어줘야 메모리 문제 안생김.
        })
        ws.interval = setInterval(() => {
            if (ws.readyState === ws.OPEN) {
                ws.send('서버에서 클라이언트로 메세지를 보냅니다.'); // 3초마다 메세지 보냄
            }
        }, 3000);
    });
};

 

📄 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GIF 채팅방</title>
</head>
<body>
<div>F12를 눌러 console 탭과 network 탭을 확인하세요.</div>
<script>
    const webSocket = new WebSocket("ws://localhost:8005");
    webSocket.onopen = function() {
        console.log('서버와 웹 소켓 연결 성공');
    }
    webSocket.onmessage = function(event) {
        console.log(event.data);
        webSocket.send('클라이언트에서 서버로 답장을 보냅니다.');
    }
</script>
</body>
</html>

클라이언트, console.log

3초마다 숫자가 올라감.

 

클라이언트 쪽 메세지 주고 받은거 확인


WS 라이브러리는 정말 간단한 기능 구현할 때 사용하는 것!

Socket.io 라이브러리는 복잡한 기능 구현할 때 사용하는 것!