Websocket Server
Overview
import { WebSocketServer, WebSocket } from 'ws';
// Define the port for the server to listen on
const PORT = process.env.PORT || 8080;
// Initialize the WebSocket server
const wss = new WebSocketServer({ port: PORT });
console.log(`🚀 WebSocket server is running on ws://localhost:${PORT}`);
// Event listener for new client connections
wss.on('connection', (socket, request) => {
// Get client info like IP address if needed
const clientIp = request.socket.remoteAddress;
//console.log(`🔌 New client connected from ${clientIp}. Total clients: ${wss.clients.size}`);
// Send a welcome message to the newly connected client
//socket.send(JSON.stringify({ type: 'info', message: 'Welcome to the WebSocket server!' }));
// Event listener for incoming messages from this specific client
socket.on('message', (rawData, isBinary) => {
// Convert the raw buffer data to a readable string or object
const message = isBinary ? rawData : rawData.toString();
//console.log(`📥 Received message: ${message}`);
// Broadcast the message to all other connected clients
wss.clients.forEach((client) => {
// Check that the client is open and is NOT the sender
if (client !== socket && client.readyState === WebSocket.OPEN) {
client.send(rawData, { binary: isBinary });
}
});
});
// Event listener for when this specific client disconnects
socket.on('close', (code, reason) => {
//console.log(`❌ Client disconnected (Code: ${code}, Reason: ${reason || 'None'}). Remaining clients: ${wss.clients.size}`);
});
// Handle errors for this specific connection
socket.on('error', (error) => {
//console.error(`⚠️ Client socket error:`, error);
});
});
// Handle overall server errors
wss.on('error', (error) => {
console.error('🚨 WebSocket server error:', error);
});