단순 코드 기록/Node

Node_소켓을 통한 채팅

일일일코_장민기 2024. 3. 27. 13:08
728x90

 

 

 

 

 

 

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel = "stylesheet" href="/css/index.css">

    <script src="/socket.io/socket.io.js"></script>
    <script src="/js/index3.js"></script>          


</head>
<body>

    <div id="main">
       <input type="text" id="test">
       
       <!-- /static/js.index.js send()호출 -->
       <button onclick="send()">전송</button>
    </div>
   
   
</body>
</html>

 

js
var socket = io();

//최초 접속시 실행할 함수
//최초로 접속할 때 connect라는 이벤트가 발생
socket.on("connect", function(){
    //이름을 입력 받을 부분
    var name = prompt("반갑습니다. 이름을 입력하세요", "");

    //이름이 빈칸인 경우
    if(!name){
        name = "익명"
    }
    //유저 입장 전체 알림
    socket.emit("newUser", name);
});

//update 시 자료 출력(임시 확인용)
socket.on("update", function(data){
    console.log(`${data.name}: ${data.message}`);
})

//전송함수
function send(){

    //입력된 데이터를 가져옴
    var message = document.getElementById("test").value;
    document.getElementById("test").value="";

    //소켓에 send이벤트와 데이터 전달
    socket.emit("message", {type: "message", message: message}); //사용자 정의 send 이벤트
}

 

app
const express = require("express");
const socket = require("socket.io");
const http = require("http");

//Node.js 기본 내장 모듈 로딩****************
const fs = require("fs")    //FileSystem 모듈
//******************************************

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

app.use("/css", express.static("./static/css"));
app.use("/js", express.static("./static/js"));


app.get("/", function(req, res){
    console.log("유저가 /로 접속함");
    fs.readFile("./static/index_3.html", function(error, data){
        if(error){
            res.send("에러 발생")
        } else {
            res.writeHead(200, {"Content-Type" : "text/html"});
            res.write(data);
            res.end();
        }
    });
});

io.sockets.on("connection", function(socket){
    //connection이라는 이벤트가 발생할 경우
    socket.on("newUser", function(name){
        console.log("서버");
        console.log(name + "님이 접속하셨습니다.");
       
        //소켓에 이름 저장
        socket.name= name;

        //모든 소켓에 전송
        io.sockets.emit("update", {
            type:"connect",
            name: "SERVER",
            message: name+"님이 접속하셨습니다."
        });
    });

    socket.on("disconnect", function(){
        console.log(socket.name + "님이 나갔습니다.");
        //나가는 경우, 나머지 유저에게 메세지 전송
        socket.broadcast.emit("update", {
            type: "disconnect",
            name: "SERVER",
            message: socket.name+"님이 나가셨습니다."
        });
    });

    //전송된 메세지 받기
    socket.on("message", function(data){
   
        //받은 데이터에 전송자 이름 알아내기
        data.name = socket.name;
        console.log("message이벤트: ", data);

        //보낸 사람을 제외한 나머지 유저에게 메세지 전송
        socket.broadcast.emit("update", data);
    })

});

//서버 8081포트로 listen
server.listen(8081, function(){
    console.log("서버 실행중...");
});