websocketchat
Чат на вебсокетах с фронтендом
Состав проекта
backend
Здесь хранится серверная часть проекта, то есть сами функции с вебсокетами, загрузка данных, запись данных..
backend/server
file_operations.go
В этом файле проходят такие операции как сохранить сообщение (в JSON), загружать сообщения оттуда, сохранять и загружать юзеров.... Функции: - SaveMessage(message Message) error - LoadMessages() (MessageHistory, error) - SaveUsers(users UserList) error - LoadUsers() (UserList, error)
models.go
В этом файле хранятся всякие структуры или значения переменных для будущего использования в др.файлах - Структуры: - Client - User - UserList - Message - MessageHistory
server.go
В этом файле основное - вебсокеты. Здесь логика соединения между клиентами Функции: - HandleConnection(w http.ResponseWriter, r *http.Request) - Обрабатывает подключение клиента, отправляет сообщения и управляет состоянием клиента.
server.old
Этот файл нам не пригодится. Это старая версия server.go, я ее сохранил на всякий
backend/main.go
Здесь логика запуска сервера ws.
frontend
frontend/public
В public есть такие директории как css
, html
, js
. В них по 2 файла для работы с двумя страницами - index.html и chat.html
Почему разные html страницы?
Предназначение разное. Index.html я использую для присвоения никнейма клиенту, а chat.html соответсвенно для чата.
frontend/package(-lock).json
Это конфигурационные файлы для запуска фронтенда.
frontend/server.js
Соответсвенно доп конфиг для запуска фронтенда, сборки и тд
Методы запуска
go run main.go и npm start(не очень удобно)
Довольно интересный способ, но новичкам не очень подходит. Посмотрим на start.sh:
Запуск через start.sh
(очень удобно)
Скрипт start.sh
предназначен для одновременного запуска сервера и фронтенда. Удобство в том, что скрипт запускает одновременно две команды, что облегчает задачу. Убедитесь, что скрипт имеет права на выполнение:
chmod +x start.sh./start.sh
Прим вам могут показаться эти способы похожими, и вы будете правы, но только start.sh выполняет сразу 2 команды без ожидания пока не прервется одна из команд. На первое время способ с start.sh
очень хорош.