0Pricing
Go Academy · Урок

Основы WebSocket

Работайте с двусторонней связью в реальном времени

«Основы WebSocket» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.

Двусторонняя связь в реальном времени

HTTP работает по схеме «запрос–ответ»: клиент отправляет запрос, сервер отвечает, а соединение (логически) завершается. Для чатов, панелей мониторинга в реальном времени и игр нужен постоянный, двунаправленный канал. Именно его предоставляют WebSockets.

Рукопожатие для обновления протокола

Соединение WebSocket начинается как обычный запрос HTTP со специальными заголовками:

  • Upgrade: websocket
  • Connection: Upgrade

Сервер отвечает 101 Switching Protocols, после чего сокет TCP используется повторно для полнодуплексных кадров.

Почему не использовать обычный опрос

До появления WebSockets приложения использовали опрос (повторяющиеся запросы) или длительный опрос. Оба подхода расходуют пропускную способность и увеличивают задержку. WebSockets поддерживают одно открытое соединение, поэтому любая сторона может немедленно отправить данные.

Кадры вместо запросов

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

Полный дуплекс

В отличие от HTTP, оба участника могут отправлять данные в любой момент, не дожидаясь ответа. Сервер может отправить уведомление сразу после изменения, а клиент одновременно передать ввод пользователя.

ws и wss

Как и у http/https, у WebSockets есть две схемы:

  • ws:// — без шифрования
  • wss:// — поверх TLS (используйте этот вариант в рабочей среде)

Поддержка в стандартной библиотеке

В стандартной библиотеке Go нет реализации WebSocket только в net/http. Сообщество использует github.com/gorilla/websocket или nhooyr.io/websocket. Библиотеку gorilla мы разберём в следующем уроке.

import "github.com/gorilla/websocket"

Мысленная модель

Представьте себе WebSocket как телефонный разговор:

  • Набор номера = рукопожатие обновления HTTP-соединения
  • Открытая линия = постоянное соединение
  • Разговор в обе стороны = полнодуплексные кадры
  • Завершение разговора = кадр закрытия

Типы сообщений

Наиболее важны два типа кадров данных:

  • Текстовые кадры содержат UTF-8, часто JSON
  • Двоичные кадры содержат необработанные байты, например protobuf или изображения

Управляющие кадры (ping, pong, close) управляют самим соединением.

Где особенно полезны WebSockets

Наиболее подходящие случаи:

  • Чаты и информация о присутствии пользователей
  • Торговля в реальном времени или спортивные результаты
  • Совместное редактирование
  • Состояние многопользовательской игры

Если данные передаются только от сервера клиенту, может оказаться проще использовать Server-Sent Events.

Исполняемый пример: идея кадров

Для кода WebSocket нужна внешняя библиотека, поэтому здесь приведена аналогия на основе стандартной библиотеки: функция классифицирует сообщение как текстовое или двоичное, демонстрируя типы кадров.

package main

import (
    "fmt"
    "unicode/utf8"
)

func frameType(data []byte) string {
    if utf8.Valid(data) {
        return "text"
    }
    return "binary"
}

func main() {
    fmt.Println(frameType([]byte("hello")))
    fmt.Println(frameType([]byte{0xff, 0x00, 0x01}))
}

Проверка

Проверьте своё понимание основ WebSocket.

Повторение

Вы изучили основы WebSocket:

  • WebSocket обеспечивает постоянное полнодуплексное взаимодействие
  • Соединение начинается с рукопожатия обновления HTTP (ответ 101)
  • Данные передаются в текстовых или двоичных кадрах, а управляющие кадры управляют соединением
  • В рабочей среде используйте wss://; Go опирается на библиотеки вроде gorilla/websocket

Часто задаваемые вопросы

Урок «Основы WebSocket» бесплатный?

Да — полный текст урока «Основы WebSocket» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы WebSocket»?

Работайте с двусторонней связью в реальном времени Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Go Academy?

Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Основы WebSocket»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Go Academy?

Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы WebSocket
  2. Использование gorilla/websocket
  3. Трансляция сообщений
  4. Управление соединениями
← Назад к Go Academy