Table of Contents
웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트와 같은 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트와 연결되는 웹 사이트가 제공하는 웹 사이트입니다.
WebSocket API를 이해
WebSocket은 클라이언트(일반 브라우저)와 서버 간의 전체 쌍방향, 지속적 연결을 제공하는 통신 프로토콜입니다. 클라이언트가 모든 요청을 시작해야 하는 전통적인 HTTP와 달리 WebSocket은 초기 손잡이 이후 언제든지 데이터를 보낼 수 있는 파티를 허용합니다. 이것은 반복된 HTTP 요청의 오버헤드를 제거하고 실시간 상호 작용을 가능하게 합니다.
WebSocket의 주요 특성:
- Persistent connection – 명시적으로 닫힐 때까지 열려 있습니다.
- 낮은 대기시간 – 메시지 당 연결 오버헤드 없음.
- Bidirectional – 클라이언트와 서버 모두 메시지가 푸시될 수 있습니다.
- Lightweight framing – HTTP와 비교된 최소 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리 머리.
웹 애플리케이션의 경우 WebSocket API는 모든 현대 브라우저에서 지원됩니다. 서버는 WebSocket 프로토콜을 구현해야 합니다. 인기있는 서버 측 옵션에는 Node.js가 ws] 라이브러리, Python, ], 또는 ]]]Pusher]와 같은 관리된 서비스가 포함됩니다.
개발 환경 설정
완전한 실시간 대시보드는 데이터와 클라이언트가 렌더링하는 서버 모두 필요합니다. Node.js와 ] 서버를 위한 라이브러리를 사용하고, 클라이언트를 위한 Chart.js와 vanilla JavaScript를 사용합니다.
서버 측 설정 (Node.js + ws)
npm init -y
npm install ws
파일 생성 :
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
console.log('Client connected');
// Simulate real-time data every 2 seconds
const interval = setInterval(() => {
const data = {
timestamp: new Date().toISOString(),
value: Math.random() * 100
};
ws.send(JSON.stringify(data));
}, 2000);
ws.on('close', () => clearInterval(interval));
});
이 서버는 임의 수치를 매 2 초마다 보냅니다. 생산에서 실제 데이터 소스 (예를들면 데이터베이스 변경, Kafka 스트림, API poll)로 생성 된 데이터를 대체 할 것입니다.
고객 측 설정
] 파일을 Chart.js 및 필요한 스크립트에 대한 캔버스로 만듭니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Real-Time Dashboard</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<canvas id="liveChart" width="800" height="400"></canvas>
<script src="dashboard.js"></script>
</body>
</html>
WebSocket 연결 설정
에서 WebSocket 서버에 연결:
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = function() {
console.log('Connection established');
};
socket.onmessage = function(event) {
const data = JSON.parse(event.data);
updateChart(data);
};
socket.onclose = function() {
console.log('Connection closed');
};
socket.onerror = function(error) {
console.error('WebSocket error:', error);
};
constructor는 ] (또는 ]])로 시작하는 URL을 가지고 안전한 연결을 위해. 핸들러는 JSON을 수신하고 차트 업데이트 기능에 전달합니다.
실시간 Data 처리
효율적인 데이터 관리는 원활한 대시보드 경험에 중요합니다. 메모리 bloat 및 차트 하중을 방지하기 위해 데이터 포인트의 고정 크기 창을 유지할 수 있습니다.
const MAX_POINTS = 30;
const labels = [];
const values = [];
function updateChart(data) {
labels.push(data.timestamp);
values.push(data.value);
if (labels.length > MAX_POINTS) {
labels.shift();
values.shift();
}
myChart.data.labels = labels;
myChart.data.datasets[0].data = values;
myChart.update();
}
이전 지점을 이동하면 차트는 항상 가장 최근의 데이터를 보여줍니다. 디스플레이 폭과 원하는 시간 창을 기반으로 ]을 조정할 수 있습니다.
Chart.js로 Data 시각화
Chart.js 라인 차트를 초기화:
const ctx = document.getElementById('liveChart').getContext('2d');
const myChart = new Chart(ctx, {
type: 'line',
data: {
labels: [],
datasets: [{
label: 'Live Data',
data: [],
borderColor: '#3b82f6',
backgroundColor: 'rgba(59, 130, 246, 0.1)',
fill: true,
tension: 0.3
}]
},
options: {
responsive: true,
animation: {
duration: 300 // smooth transitions
},
scales: {
x: {
type: 'time',
time: { unit: 'second' },
title: { display: true, text: 'Time' }
},
y: {
beginAtZero: true,
title: { display: true, text: 'Value' }
}
}
}
});
시간 가늠자를 사용하여 또는 유사한 접합기를 포함하여 요구합니다. 단순성을 위해, 당신은 끈으로 상표를 대우하고 시간 축선을 비활성화할 수 있습니다. 예를 들면 적당한 연대를 위한 시간 가늠자를 이용합니다.
다중 Datasets 추가
여러 미터를 동시에 모니터링하려면 여러 데이터 세트를 추가하십시오.
datasets: [
{ label: 'CPU', data: [], borderColor: 'red' },
{ label: 'Memory', data: [], borderColor: 'green' },
{ label: 'Network', data: [], borderColor: 'blue' }
]
서버에서 여러 키와 각 dataset을 업데이트하여 객체를 전송합니다.
고급 기능
자동 소비 Axes
예측할 수없는 범위의 데이터를 위해 ]과 ]를 동적으로 설정합니다. 모든 업데이트 또는 사용 Chart.js의 및 옵션을 사용하여 min/max를 계산합니다.
데이터 필터링 및 경고
시각 경고를 트리거하거나 알림을 보낼 수 있는 임계값을 추가합니다. 예를 들어, 한계 위의 강조값:
if (data.value > 90) {
myChart.data.datasets[0].pointBackgroundColor = 'red';
} else {
myChart.data.datasets[0].pointBackgroundColor = 'blue';
}
다중 차트
다른 데이터 스트림에 대한 별도의 차트를 작성합니다. 각에는 자체 캔버스와 업데이트 기능이 있습니다. 필드에 따라 동일한 WebSocket 연결 및 경로 데이터를 재사용 할 수 있습니다.
오류 처리 및 재연결
네트워크 중단은 불가피합니다. 폭발성 백오프를 가진 자동적인 재연결을 실행하십시오:
function connect() {
const socket = new WebSocket('ws://localhost:8080');
socket.onclose = function() {
console.log('Disconnected, retrying in 3 seconds...');
setTimeout(connect, 3000);
};
socket.onerror = function() {
socket.close();
};
// ... other handlers
}
connect();
생산에 대한, 많은 클라이언트가 동시에 연결 할 때 thundering herd 문제를 방지하기 위해 지터를 추가합니다.
보안 고려 사항
- WSS를 사용 - 항상 TLS를 사용하여 WebSocket 트래픽을 암호화합니다.
- Authenticate connection – 핸디케이크 기간 동안 토큰을 확인(예: 쿼리 매개 변수 또는 쿠키를 통해).
- Validate 수신된 데이터 – 절대 클라이언트 입력을 신뢰하지; 서버에 만족.
- Rate limiting – 연결 당 throttling 메시지 비율에 의해 남용을 방지합니다.
성능 최적화
높은 데이터 처리량에 따라 대시보드를 유지하려면:
- Throttle update – 메시지가 브라우저보다 빠르게 도착하면 일괄 또는 디부스 클라이언트 측 렌더링 (예를 들어, 각 100ms).
- 사용 요청AnimationFrame – 브라우저의 페인트 사이클과 동기화 차트 업데이트.
- Limit data point – 메모리와 DOM 모두.
- offload Heavy Measurement – 데이터 변환을 위한 웹 작업자를 사용합니다.
- Compress 메시지 - 바이너리 형식 (ArrayBuffer) 또는 압축 (예를들면, permessage-deflate)를 고려하십시오.
Dashboard 테스트
다양한 시나리오를 시뮬레이션 할 수있는 모성 WebSocket 서버로 테스트 :
- 정상적인 자료 cadence
- 버스 교통 (한 번에 메시지)
- 연결 및 연결
- Malformed JSON의 정의
Postman's WebSocket client 또는 브라우저 개발자 도구는 프로토콜을 디버깅할 수 있습니다.
관련 상품
PM2와 같은 프로세스 관리자를 사용하여 WebSocket 서버 실행을 유지하십시오. 역 프록시 (nginx, Caddy)을 통해 정적 클라이언트 파일을 세울 수 있습니다. 종료. 예 nginx 설정 스니펫 :
location /ws/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
호스팅 제공 업체가 WebSocket passthrough를 지원하거나 확장성을 위해 전용 WebSocket 서비스를 사용하십시오.
관련 기사
JavaScript와 WebSocket API를 사용하여 실시간 대시보드를 구축하면 최소한의 지연으로 실시간 데이터를 모니터링할 수 있습니다. Chart.js와 같은 응답된 차트 라이브러리와 지속적인 WebSocket 연결을 결합하면 즉시 대화형으로 대시보드를 만들 수 있습니다. 이 아키텍처는 단순 데모에서 엔터프라이즈급 모니터링 시스템까지 확장합니다. 여기에 설명된 기본으로 시작하면 데이터 소스, 시각화 및 성능 최적화를 특정 사용 사례에 맞게 설정할 수 있습니다.
더 읽기를 위해 MDN WebSocket API 문서과 ]Chart.js 문서를 참조하세요.