51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
const express = require('express');
|
|
const WebSocket = require('ws');
|
|
const http = require('http');
|
|
|
|
const app = express();
|
|
const server = http.createServer(app);
|
|
const wss = new WebSocket.Server({ server, path: '/counter-ws' });
|
|
|
|
let counter = 0; // In-memory counter (resets on server restart)
|
|
|
|
app.use(express.json());
|
|
|
|
// API endpoint to get current counter value
|
|
app.get('/api/counter', (req, res) => {
|
|
res.json({ value: counter });
|
|
});
|
|
|
|
// API endpoint to increment counter
|
|
app.post('/api/counter/increment', (req, res) => {
|
|
counter += 1;
|
|
res.json({ value: counter });
|
|
|
|
// Broadcast update to all connected WebSocket clients
|
|
wss.clients.forEach(client => {
|
|
if (client.readyState === WebSocket.OPEN) {
|
|
client.send(JSON.stringify({ type: 'counter-update', value: counter }));
|
|
}
|
|
});
|
|
});
|
|
|
|
// WebSocket connection handling
|
|
wss.on('connection', (ws) => {
|
|
console.log('Client connected');
|
|
|
|
ws.on('message', (message) => {
|
|
console.log('Received:', Buffer.from(message).toString());
|
|
});
|
|
|
|
ws.on('error', (error) => {
|
|
console.log('WebSocket error:', error);
|
|
});
|
|
|
|
ws.on('close', (code, reason) => {
|
|
console.log('Client disconnected', 'Code:', code, 'Reason:', reason.toString());
|
|
});
|
|
});
|
|
|
|
const PORT = 3001; // API and WebSocket server port
|
|
server.listen(PORT, '127.0.0.1', () => {
|
|
console.log(`Server running on http://127.0.0.1:${PORT}`);
|
|
}); |