Создание чата (веб-сокеты)
Шаг 1. Настройки модуля
Сначала надо настроить сервер через модуль exress.
Затем установить модуль socket.io для работы с сокетами.
npm install socket.io
Код создания веб-сервера для чата.
var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io').listen(http); // установка папки и движка шаблона app.set('views', 'views'); app.set('view engine', 'ejs'); // код выполняется, когда пользователь открывает страницу с чатом io.on('connection', function(socket){ console.log('User connected'); // код выполняется, когда пользователь закрывает страницу с чатом socket.on('disconnect', function(){ console.log('User disconnected'); }); }); // страница с чатом (файл «views/chat.ejs») app.get('/chat', function(req, res) { res.render('chat'); }); // запуск веб-сервера (через переменную http) http.listen(3000, function(){ console.log('Server running'); });
В шаблоне добавить следующий код (файл «/socket.io/socket.io.js» на сервере появится автоматически).
<script src="/socket.io/socket.io.js"></script> <script> var socket = io(); </script>
Шаг 2. Отправка сокетов
Надо создать форму, которая будет отправлять сообщения в чат.
<!-- views/chat.ejs --> <!-- область, где будут появляться сообщения --> <ul id="messages"></ul> <!-- Форма отправки сообщения --> <form id="chat-form"> <input type="text" id="chat-message"> <input type="submit" value="Отправить"> </form>
Код, который будет отправлять сокет на сервер.
<!-- views/chat.ejs --> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); var chatMessage = document.getElementById("chat-message"); // выполнение кода после нажатия на кнопку «Отправить» document.getElementById("chat-form").onsubmit = function(e) { // отмена действия по умолчанию (отправка формы) e.preventDefault(); // отправка сокета с именем «chat message» socket.emit("chat message", chatMessage.value); } </script>
Метод socket.emit()
генерирует событие с указанным именем. В данном случае, генерируется событие отправки сообщения в чат. Отследить данное событие со стороны сервера можно через метод socket.on()
.
// app.js io.on('connection', function(socket){ console.log('user connected'); // принимать сокет с именем «chat message» socket.on('chat message', function(msg){ // отправить сообщение в чат всем пользователям io.emit('chat message', msg); }); });
После того, как на сервере был принят сокет, идёт отправка всем пользователям, что в чате появилось новое сообщение. Принять данное сообщение и добавить в чат можно через метод socket.on('socket-name')
.
// views/chat.ejs socket.on('chat message', function(msg){ // создание тега <li> с новым сообщением var newMessage = document.createElement("li"); newMessage.innerHTML = msg; // добавление сообщения в элемент с id «messages» document.getElementById("messages").appendChild(newMessage); });
Поддержать автора