Введение в WebSocket в Rust
Долгоживущий канал поверх HTTP держит соединение открытым и передает сообщение в обе стороны без повторного рукопожатия на каждый кусок текста. Клиент и сервер читают очередную порцию, когда она готова, и могут отправить ответ в любой момент, пока канал жив.
Сначала идет обычный запрос с просьбой перейти на другой режим обмена. После согласия сокет остается тем же, но данные идут рамками с типом: текст, закрытие или служебные кадры. Ошибки сети и разрыв видны как конец чтения или отдельный кадр завершения.
На сервере тот же асинхронный прием, что и для обычных адресов, дополняют обработчиком перехода и циклом чтения из сокета. Клиент открывает адрес со схемой без шифрования на локальном порту и пишет текст через половины потока после разделения.
Дальше примем переход на сервере, откроем адрес на клиенте, обменяемся короткими строками, разведем соединения по задачам, разошлем текст через общий канал рассылки и завершим чтение кадром закрытия.