diff --git a/backend/src/routes/alerts.js b/backend/src/routes/alerts.js index 30294a9..64666b3 100644 --- a/backend/src/routes/alerts.js +++ b/backend/src/routes/alerts.js @@ -293,8 +293,8 @@ router.get('/recent', async (req, res) => { }); // WebSocket for real-time alerts -export function setupAlertsWebSocket(server) { - const wss = new WebSocketServer({ server, path: '/ws/alerts' }); +export function setupAlertsWebSocket() { + const wss = new WebSocketServer({ noServer: true }); wss.on('connection', (ws) => { console.log('Client connected to alerts feed'); diff --git a/backend/src/routes/websocket.js b/backend/src/routes/websocket.js index bf797d9..b16b654 100644 --- a/backend/src/routes/websocket.js +++ b/backend/src/routes/websocket.js @@ -2,8 +2,8 @@ import { WebSocketServer } from 'ws'; import { rawQuery } from '../db.js'; import { optionsFlowQuery } from '../queries/optionsFlowQuery.js'; -export function setupWebSocket(server) { - const wss = new WebSocketServer({ server, path: '/ws/flow' }); +export function setupWebSocket() { + const wss = new WebSocketServer({ noServer: true }); wss.on('connection', (ws) => { console.log('Client connected to WebSocket'); diff --git a/backend/src/server.js b/backend/src/server.js index 7333ed6..35cbca5 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -120,9 +120,25 @@ const server = app.listen(PORT, async () => { } }); -// Setup WebSocket -setupWebSocket(server); -setupAlertsWebSocket(server); +// Setup WebSockets manually to handle multiple paths +const flowWss = setupWebSocket(); +const alertsWss = setupAlertsWebSocket(); + +server.on('upgrade', (request, socket, head) => { + const pathname = request.url.split('?')[0]; + + if (pathname === '/ws/flow') { + flowWss.handleUpgrade(request, socket, head, (ws) => { + flowWss.emit('connection', ws, request); + }); + } else if (pathname === '/ws/alerts') { + alertsWss.handleUpgrade(request, socket, head, (ws) => { + alertsWss.emit('connection', ws, request); + }); + } else { + socket.destroy(); + } +}); // Graceful shutdown process.on('SIGTERM', () => {