fix: resolve WebSocket path conflicts by manually routing HTTP upgrade events
Build Institutional Trader / build-and-deploy (push) Successful in 2m1s Details

This commit is contained in:
Deep Koluguri 2026-06-22 22:10:53 -04:00
parent 2ba6425eed
commit c981faf3a6
3 changed files with 23 additions and 7 deletions

View File

@ -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');

View File

@ -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');

View File

@ -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', () => {