Как определить два порта в Vercel?

Как правильно задеплоить приложение, используя NestJs, которое имеет HTTP сервер и сервер Socket.io, работающие на разных портах, чтобы обеспечить функционирование Socket.io на отдельном порту?
  • 4 декабря 2024 г. 8:03
Ответы на вопрос 1
Vercel, как платформа развертывания, не поддерживает использование нескольких портов для одного приложения. Приложения на Vercel работают в серверless среде и принимают трафик только через один порт (80 для HTTP и 443 для HTTPS). Таким образом, нельзя задеплоить NestJS приложение с отдельными HTTP и Socket.io серверами, работающими на разных портах.

Однако, вы можете интегрировать Socket.io в ваше NestJS приложение, чтобы оно работало на той же точке входа, что и HTTP сервер. Вот шаги, как это сделать:

### Шаги по интеграции Socket.io в NestJS:

1. **Установите зависимости.** Если у вас еще нет зависимости Socket.io, установите её:
   ```bash
   npm install @nestjs/platform-socket.io socket.io
   ```

2. **Создайте WebSocketGateway.** В вашем приложении NestJS создайте WebSocketGateway:
   ```typescript
   import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
   import { Server } from 'socket.io';

   @WebSocketGateway()
   export class AppGateway {
     @WebSocketServer()
     server: Server;

     // Обработчик событий
     handleConnection(client: any) {
       console.log('Client connected: ', client.id);
     }

     handleDisconnect(client: any) {
       console.log('Client disconnected: ', client.id);
     }
   }
   ```

3. **Импортируйте Gateway в ваш модуль.** В вашем модуле (например, `AppModule`) добавьте созданный Gateway:
   ```typescript
   import { Module } from '@nestjs/common';
   import { AppGateway } from './app.gateway';

   @Module({
     providers: [AppGateway],
   })
   export class AppModule {}
   ```

4. **Измените конфигурацию Vercel (если это необходимо).** Убедитесь, что ваш Vercel проект настроен правильно для работы с WebSocket. Это может зависеть от конкретных требований вашего приложения.

5. **Деплой.** Теперь вы можете развернуть приложение на Vercel. Используйте команду:
   ```bash
   vercel
   ```

### Примечания:

- WebSocket будет работать по тому же URL, что и ваши HTTP запросы. Например, если ваше приложение работает по адресу `https://your-app.vercel.app`, то соединение WebSocket будет также устанавливаться на этот же адрес.
- Убедитесь, что ваш клиент Socket.io также правильно настроен для установки соединения по указанному URL.

Соблюдая эти шаги, вы сможете успешно развернуть ваше NestJS приложение с поддержкой Socket.io на Vercel, не используя разные порты.
Похожие вопросы