Сделать чтобы сокет и сайт работали на одному порту?

Да, в Node.js можно создать приложение, которое позволяет сокету и веб-сайту работать на одном порту. Это достигается с использованием библиотеки Express.js и ее расширения socket.io.

Для начала, установим необходимые зависимости. Откройте командную строку и выполните следующую команду:

npm install express socket.io --save

После установки зависимостей создайте файл server.js и скопируйте в него следующий код:

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);

// Установим порт, на котором будет работать приложение
const PORT = 3000;

// Обрабатываем GET-запрос на главную страницу
app.get('/', (req, res) => {
  // Отправляем пользователю главную страницу
  res.sendFile(__dirname + '/index.html');
});

// Обработка события подключения сокета клиента
io.on('connection', (socket) => {
  console.log('Пользователь подключился');

  // Обработка события отключения сокета клиента
  socket.on('disconnect', () => {
    console.log('Пользователь отключился');
  });
});

// Запускаем сервер на заданном порту
http.listen(PORT, () => {
  console.log(`Сервер запущен на порту ${PORT}`);
});

Создайте файл index.html и скопируйте следующий код:

<!DOCTYPE html>
<html>
<head>
  <title>Socket.io</title>
  <script src="/socket.io/socket.io.js"></script>
  <script>
    // Подключаемся к серверу
    var socket = io();

    socket.on('connect', () => {
      console.log('Подключено к серверу');
    });

    socket.on('disconnect', () => {
      console.log('Отключено от сервера');
    });
  </script>
</head>
<body>
  <h1>Пример работы с сокетами в Node.js</h1>
</body>
</html>

Теперь, запустите приложение, выполнив команду node server.js в командной строке. Приложение будет запущено на порту 3000.

Откройте браузер и перейдите по адресу http://localhost:3000. Вы увидите главную страницу с заголовком "Пример работы с сокетами в Node.js" и в консоли разработчика браузера отобразится сообщение "Подключено к серверу".

Теперь, при подключении нового сокета к серверу, в консоли сервера будет отображаться сообщение "Пользователь подключился". При отключении сокета, будет отправлено сообщение "Пользователь отключился".