Необходимо реализовать сервер в виде консольного приложения, который регистрирует подключения клиентских приложений (каждому клиенту при подключении присваивается уникальный идентификатор) по веб-сокетам в группах (hub) не более n - клиентов
При выполнении в консоли сервера команды “send --hub” (где параметр --hub - номер hub) осуществляется broadcast рассылка произвольного сообщения все клиентам указанного hub
При выполнении в консоли сервера команды “sendс --id” (где параметр --id - идентификатор клиента) осуществляется отправка сообщения сообщения конкретному клиенту
Тестовое задание можно было бы легко сделать с использованием библиотеки gorilla/websocket, но я решил пойти более интересным путем и сделать задание используя только встроенные библиотеки
На решение этого тестового задания потребовалось потратить 8 часов:
- Изучение формирования соединения между клиентом и сервером. Написал функцию (используя статьи) для апгрейда соединения до ws - 1 час
- Изучение принципов общения, правил построения фреймов. Написал функции для чтения и написания сообщений - 3 часа
- Изучение паттернов построения серверов для чатов и написание кастомного сервера, для обработки подключений и рассылки сообщений - 3 часа
- Приведение все в нормальный вид, расставление комментариев и тестирование - 1 час
- Запускаете сервер из терминала строкой "go run main.go"
- Запускаете postman, задаете клиента для общения по вебсокету и вписываете адрес: "ws://localhost:8000/ws" и подключаетесь к серверу
- Если хотите отправить сообщение конкретному клиенту, необходимо написать "sendc --id /clientID/ /msg/"
- Если хотите отправить сообщение клиентам какого-то хаба, необходимо написать "send --hub /hubID/ /msg/"
Примечания:
- При подключении клиента к серверу, клиенту сразу же поступает сообщение с его идентификатором и идентификатором его хаба