Да, в 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" и в консоли разработчика браузера отобразится сообщение "Подключено к серверу".
Теперь, при подключении нового сокета к серверу, в консоли сервера будет отображаться сообщение "Пользователь подключился". При отключении сокета, будет отправлено сообщение "Пользователь отключился".