Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpWsInr 261 of 280 menu
◀ ▶

Введение в WebSocket в Go

После обычного HTTP-запроса связь обычно заканчивается вместе с ответом. Протокол WebSocket сначала проходит тот же обмен заголовками, а затем оставляет открытое соединение. По нему стороны шлют сообщения туда и обратно, не открывая новый запрос на каждую фразу.

Такой канал удобен для уведомлений, чатов и простых игр, где сервер сам может написать клиенту, а не только отвечать на очередной просмотр страницы. Формат кадров уже разобран библиотекой: в коде работают с готовым объектом соединения, а не с сырыми байтами рукопожатия.

В стандартной поставке Go нет готового типа для этого протокола. На практике берут модуль github.com/gorilla/websocket. Из корня проекта, где лежит go.mod, зависимость добавляют командой go get github.com/gorilla/websocket; номер версии в уроке не фиксируют, его подставит сам инструмент модулей.

В этом разделе поднимем HTTP-сервер с переводом на канал сообщений, откроем клиент по адресу со схемой ws, прочитаем и отправим текст, соберем несколько соединений в карте под замком, сделаем рассылку и аккуратное закрытие. Файлы и первые предложения: server/ru.html (сервер поднимает обычный HTTP и на одном пути переводит соединение в сообщения), client/ru.html (клиент сам открывает адрес со схемой ws и дальше пишет сообщения), exchange/ru.html (сервер читает текст и отвечает в то же соединение), several/ru.html (каждое соединение держат в карте, чтобы не потерять его), broadcast/ru.html (одно сообщение можно отправить всем, кто сейчас в карте), close/ru.html (соединение закрывают и убирают из карты, чтобы не писать в него дальше), practice/ru.html (в этих задачах потренируем сервер, сообщение и ответ).

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить