본문 바로가기
CS/네트워크

[CS] 네트워크의 기초 #5 유니캐스트, 멀티캐스트, 브로드캐스트

by Johnny's 2023. 10. 11.

네트워크의 기초 #5 유니캐스트, 멀티캐스트, 브로드캐스트

유니캐스트

유니캐스트란 1 : 1통신을 말함. 대표적으로 HTTP 통신이 있음. 가장 일반적인 네트워크 전송 형태

멀티캐스트

멀티캐스트는 1 : N 통신. 다만 연결된 모든 노드들에게 데이터를 전달하지는 않고 특정 그룹에게만 데이터를 전달

브로드캐스트

브로드캐스트는 1 : N 통신. 그룹이 아닌 연결되어있는 모든 노드에게 데이터를 전달. 예로는 ARP가 있음

브로드캐스트 실습

npm install express socket.io

 

server.js

const app = require("express")();
const http = require("http").Server(app);
const io = require("socket.io")(http);
const port = process.env.PORT || 3000;
app.get("/", (req, res) => {
    res.sendFile(__dirname + "/index.html");
});
io.on("connection", (socket) => {
    socket.on("chat message", (msg) => {
        io.emit("chat message", msg);
    });
});
http.listen(port, () => {
    console.log(`Socket.IO server running at
http://localhost:${port}/`);
});

 

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Socket.IO chat</title>
        <style>
            body {
                margin: 0;
                padding-bottom: 3rem;
                font-family: -apple-system, BlinkMacSystemFont, "Segoe UI",
                    Roboto, Helvetica, Arial, sans-serif;
            }
            #form {
                background: rgba(0, 0, 0, 0.15);
                padding: 0.25rem;
                position: fixed;
                bottom: 0;
                left: 0;
                right: 0;
                display: flex;
                height: 3rem;
                box-sizing: border-box;
                backdrop-filter: blur(10px);
            }
            #input {
                border: none;
                padding: 0 1rem;
                flex-grow: 1;
                border-radius: 2rem;
                margin: 0.25rem;
            }
            #input:focus {
                outline: none;
            }
            #form > button {
                background: #333;
                border: none;
                padding: 0 1rem;
                margin: 0.25rem;
                border-radius: 3px;
                outline: none;
                color: #fff;
            }
            #messages {
                list-style-type: none;
                margin: 0;
                padding: 0;
            }
            #messages > li {
                padding: 0.5rem 1rem;
            }
            #messages > li:nth-child(odd) {
                background: #efefef;
            }
        </style>
    </head>
    <body>
        <ul id="messages"></ul>
        <form id="form" action="">
            <input id="input" autocomplete="off" /><button>Send</button>
        </form>
        <script src="/socket.io/socket.io.js"></script>
        <script>
            var socket = io();
            var messages = document.getElementById("messages");
            var form = document.getElementById("form");
            var input = document.getElementById("input");
            form.addEventListener("submit", function (e) {
                e.preventDefault();
                if (input.value) {
                    socket.emit("chat message", input.value);
                    input.value = "";
                }
            });
            socket.on("chat message", function (msg) {
                var item = document.createElement("li");
                item.textContent = msg;
                messages.appendChild(item);
                window.scrollTo(0, document.body.scrollHeight);
            });
        </script>
    </body>
</html>

 

출력 화면

 

* 참고

- CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 -인프런

댓글