сокети працюють окремо від експрес. Підрефакторимо індекс фапйл
constsocketIO=require("socket.io")
і треба підправити запуск сервера так, зоб підключити сокети до нашого сервера
// ===========SERVER INIT=========== //constserver=app.listen(3000,()=>{console.log("server is up and runned on port 3000");});// ===========SOCKET EXAMPLE =========== //constio=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
і в ньому створимо верстку чату, але зараз головне, зоб фронтенд і бекенд обмінядися подіями і месеждами
то в консолі як на сервері так і в браузері побачимо обмін повідомленнями.
ПОРЕФАКТОРИМО БЕКЕНД РОЗШИРИМО ФУНКЦІЇ
НАПИШЕМО ЧАТ
створимо на бекенді і фронтенді кастомний івент "message"
прим connect - це дефолтний івент
фронт
в цьому прикладі бекенд приймає повідомлення з форми при сабміті і одразу відправляє по події його назад клієнту.
А у фронті він чекає на подію message і як тільки вона відбувається виводить у список отримане повідомлення крім того. дефолтна подія connect при приєднанні нового користувача видасть нове повідомлення у всі х у кого відкритий цей фронт.
примітка: тут можна прописати стилі для фронта для краси
ПОРЕФАКТОРИМО. СТВОРИМО РУМИ. І БУДЕМО КОНЕКТИТИСЬ НЕ ДО ОДНОГО ЗАГАЛЬНОГО ЧАТУ А ДО РІЗНИХ КІМНАТ і вводити імʼя юзера
створимо для фронти у папці статік новий файли javascript.html і python.html для різних кімнат для спілкування.
також у файдах створимо другу форму для логіна. а офновна форма буле неактивна. при вході до долучення до чату спочатку залогінимося а потім тільки буде можливість віжправляти повідомлення
на сервері можна завести кілька сокетів namespace
бекенд
У цьому коді ми робимо все як і раніше, тільки ще ділимо по "кімнатах"
nodeNameSpace - приходитиме з фронту - кямната до якої ми приєднаємося при ешені on отримуємо data.room і за допомогою метода join приєднуємося до тієї кімнати
після цього тільки у цій кімнаті повертаємо повідомлення за допомогоюб метода emit.
далі у випалку виникнення події message ми отримуємо data і повертаємо в той же рум повідомлення.
тепер пропишемо фронт кімнати javascript.html
у кімнаті пайтон така сама верска тільки інша назва змінної room