웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트와 같은 웹 사이트가 제공하는 웹 사이트가 제공하는 웹 사이트와 연결되는 웹 사이트가 제공하는 웹 사이트입니다.

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 문서를 참조하세요.