чорнетка сокети
Встановимо на бекенді
npm i socket.ioсокети працюють окремо від експрес. Підрефакторимо індекс фапйл
const socketIO = require("socket.io")і треба підправити запуск сервера так, зоб підключити сокети до нашого сервера
// ===========SERVER INIT=========== //
const server = app.listen(3000, () => {
console.log("server is up and runned on port 3000");
});
// ===========SOCKET EXAMPLE =========== //
const io = socketIO(server);
io.on("connection", (socket) => {
// логування на бекенді
console.log("Socket is connected..");
// відправка в консоль на фронтенд із бекенду
socket.emit("message", { msg: "Hello from socket!" });
socket.on("custom event", (data) => {
console.log(data);
});
});
module.exports = server;А фронтенд відпрацюємо із статичних файдів
у папці static створимо файл chat.html
і в ньому створимо верстку чату, але зараз головне, зоб фронтенд і бекенд обмінядися подіями і месеждами
а після цього запустити сервер і зайти в браузер http://localhost:3000/chat.html
то в консолі як на сервері так і в браузері побачимо обмін повідомленнями.
ПОРЕФАКТОРИМО БЕКЕНД РОЗШИРИМО ФУНКЦІЇ
НАПИШЕМО ЧАТ
створимо на бекенді і фронтенді кастомний івент "message"
прим connect - це дефолтний івент
фронт
в цьому прикладі бекенд приймає повідомлення з форми при сабміті і одразу відправляє по події його назад клієнту.
А у фронті він чекає на подію message і як тільки вона відбувається виводить у список отримане повідомлення крім того. дефолтна подія connect при приєднанні нового користувача видасть нове повідомлення у всі х у кого відкритий цей фронт.
примітка: тут можна прописати стилі для фронта для краси
ПОРЕФАКТОРИМО. СТВОРИМО РУМИ. І БУДЕМО КОНЕКТИТИСЬ НЕ ДО ОДНОГО ЗАГАЛЬНОГО ЧАТУ А ДО РІЗНИХ КІМНАТ і вводити імʼя юзера
створимо для фронти у папці статік новий файли javascript.html і python.html для різних кімнат для спілкування.
також у файдах створимо другу форму для логіна. а офновна форма буле неактивна. при вході до долучення до чату спочатку залогінимося а потім тільки буде можливість віжправляти повідомлення
на сервері можна завести кілька сокетів namespace
бекенд
У цьому коді ми робимо все як і раніше, тільки ще ділимо по "кімнатах"
nodeNameSpace - приходитиме з фронту - кямната до якої ми приєднаємося при ешені on отримуємо data.room і за допомогою метода join приєднуємося до тієї кімнати
після цього тільки у цій кімнаті повертаємо повідомлення за допомогоюб метода emit.
далі у випалку виникнення події message ми отримуємо data і повертаємо в той же рум повідомлення.
тепер пропишемо фронт кімнати javascript.html
у кімнаті пайтон така сама верска тільки інша назва змінної room
Last updated