const WebSocket = require('ws');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
const PORT = 8082; // 8082번 포트로 변경
const server = app.listen(PORT, () => {
console.log(`Node.js 서버가 ${PORT}번 포트에서 실행 중입니다.`);
});
const wss = new WebSocket.Server({ server }); // 기존의 HTTP 서버를 WebSocket 서버로 사용
function broadcastAlert(message) {
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify({ message }));
}
});
}
app.post('/alert', (req, res) => {
const { detected } = req.body;
if (detected) {
console.log('흉기 감지! 클라이언트에 알림을 전송합니다.');
broadcastAlert('Weapon detected!');
}
res.status(200).send('Alert received');
});
wss.on('connection', (ws) => {
console.log('클라이언트가 연결되었습니다.');
ws.on('message', (message) => {
console.log(`클라이언트로부터 메시지 수신: ${message}`);
});
ws.on('close', () => {
console.log('클라이언트가 연결을 종료했습니다.');
});
ws.on('error', (error) => {
console.error('WebSocket 오류 발생:', error);
});
});
cmd창에서 curl 명령어 입력해서 테스트


WebSocket을 사용하여 실시간으로 클라이언트에 흉기 감지 알림을 전달하는 서버를 구현.
FastAPI와의 연계를 통해 감지 알림을 수신하면 클라이언트에게 알림을 브로드캐스트.
클라이언트는 WebSocket을 통해 서버에 연결하여 실시간으로 알림을 받을 수 있음.
클라이언트
Cctv.js
...
useEffect(() => {
const socket = new WebSocket("ws://localhost:8082");
socket.onopen = () => {
console.log("WebSocket connected");
};
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log("Message from server:", data.message);
// 알림을 표시하는 부분
Swal.fire({
title: '흉기 감지 알림!',
text: data.message,
icon: 'warning',
confirmButtonText: '확인'
});
};
socket.onclose = () => {
console.log("WebSocket disconnected");
};
// 컴포넌트 언마운트 시 WebSocket 연결 종료
return () => {
socket.close();
};
}, []);
...

