From 0d61fbcc421a9a45e86cf76bcdde4f3502a5ee4d Mon Sep 17 00:00:00 2001 From: hhow09 Date: Wed, 22 Jan 2025 01:14:23 +0100 Subject: [PATCH] fix: express and socket share same server --- backend/src/chat-server.ts | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/backend/src/chat-server.ts b/backend/src/chat-server.ts index e7205b9..4909c63 100644 --- a/backend/src/chat-server.ts +++ b/backend/src/chat-server.ts @@ -1,28 +1,19 @@ import express, { Request, Response } from 'express'; import { Logger } from "pino"; import { Server, Socket } from "socket.io"; -import { createServer } from "http"; export class ChatServer { port: number; app: express.Application; logger: Logger; - io: Server; constructor(logger: Logger, port: number = 3000) { this.port = port; this.logger = logger; this.app = express(); - // ref: https://socket.io/docs/v4/server-initialization/#with-express - this.io = new Server(createServer(this.app), { - cors: { - origin: '*', - } - }); this.setupAppRoutes(); - this.setupSocketHandler(); } - setupAppRoutes() { + private setupAppRoutes() { // health check // ref: https://kubernetes.io/docs/reference/using-api/health-checks/ this.app.get('/livez', (req: Request, res: Response) => { @@ -30,11 +21,8 @@ export class ChatServer { }); } - setupSocketHandler() { - this.io.on("listening", () => { - this.logger.info(`Server running at http://localhost:${this.port}`); - }); - this.io.on('connection', (socket: Socket) => { + private setupSocketHandler(io: Server) { + io.on('connection', (socket: Socket) => { const sessionLogger = this.logger.child({ session: socket.id }); sessionLogger.info(`Connected client session ${socket.id} on port ${this.port}`); socket.on('disconnect', () => { @@ -43,7 +31,17 @@ export class ChatServer { }); } - listen() { - this.io.listen(this.port); + public listen() { + const httpServer = this.app.listen(this.port, + () => { console.log(`Server listening on port ${this.port}`) } + ); + + // Express server and socket.io server is sharing the same http server + const io = new Server(httpServer, { + cors: { + origin: '*', + } + }); + this.setupSocketHandler(io); } }