
WebSocket 프로토콜은 클라이언트와 서버 간의 지속적이고 양방향의 통신을 가능하게 한다.
WebSocket 통신은 "프레임"이라는 단위로 데이터를 전송한다. 각 프레임은 페이로드 데이터(payload data)와 이 데이터에 대한 메타데이터(meta-data)를 포함한다. 메타데이터는 프레임의 길이, 종류, 페이로드 데이터의 해석 방법 등을 지정한다.
연결 설정 (Connection Establishment):
데이터 전송 (Data Transmission):
연결 종료 (Connection Termination):
WebSocket은 실시간 양방향 통신을 제공하는 강력한 프로토콜이지만, 장단점이 있다.
WebSocket 프로토콜은 실시간 양방향 통신이 필요한 다양한 웹 애플리케이션에서 중요한 역할을 수행한다. 하지만, 사용 시에는 해당 프로젝트의 요구 사항과 WebSocket의 장단점을 고려하여 적절한 구현 방법을 선택해야 한다.

npm install socket.io
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);
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('disconnect', () => {
console.log('user disconnected');
});
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
});
server.listen(3000, () => {
console.log('listening on *:3000');
});
<!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
<style>
/* Add some style */
</style>
</head>
<body>
<ul id="messages"></ul>
<form id="form" action="" autocomplete="off">
<input id="input" autocomplete="off"><button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
var socket = io();
$('form').submit(function() {
socket.emit('chat message', $('#input').val());
$('#input').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
</script>
</body>
</html>
위 예제는 간단한 채팅 애플리케이션을 만드는 방법을 보여준다. 사용자는 메시지를 입력하고 "Send" 버튼을 클릭하여 메시지를 전송하며, 서버는 이 메시지를 받아서 모든 클라이언트에게 브로드캐스트한다.
실시간 대시보드는 서버에서 수집된 데이터를 실시간으로 클라이언트에 표시해야 한다. Socket.IO를 사용하면 서버에서 클라이언트로 실시간으로 데이터를 푸시할 수 있다.
// 서버
io.on('connection', (socket) => {
setInterval(() => {
const data = getData(); // 데이터를 가져오는 함수
socket.emit('update data', data);
}, 1000);
});
// 클라이언트
socket.on('update data', (data) => {
updateDashboard(data); // 대시보드를 업데이트하는 함수
});
이 예제에서는 서버가 1초마다 데이터를 가져와서 클라이언트에게 'update data' 이벤트를 통해 데이터를 전송한다. 클라이언트는 이 이벤트를 받아서 대시보드를 업데이트한다.
Socket.IO는 이와 같이 실시간 양방향 통신이 필요한 다양한 웹 애플리케이션에서 활용할 수 있으며, 사용자 정의 이벤트와 네임스페이스, 룸 기능을 통해 복잡한 비즈니스 로직을 쉽게 구현할 수 있다.