чорнетка сокети

Встановимо на бекенді

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