Ответ
WebSocket — это протокол связи поверх TCP, обеспечивающий постоянное полнодуплексное (двустороннее) соединение между клиентом (например, браузером или мобильным приложением) и сервером. Он предназначен для обмена данными в реальном времени с минимальными задержками.
Ключевые отличия от HTTP:
| Аспект | HTTP | WebSocket |
|---|---|---|
| Модель связи | Запрос-ответ (полудуплексная) | Постоянное полнодуплексное соединение |
| Инициатива отправки | Только клиент | Клиент и сервер могут отправлять данные в любой момент |
| Накладные расходы | Заголовки передаются с каждым запросом | Минимальные после установки соединения (handshake) |
Пример использования в Swift с URLSessionWebSocketTask:
// 1. Установка соединения
let socketURL = URL(string: "wss://echo.websocket.org")! // wss — защищенный WebSocket
let webSocketTask = URLSession.shared.webSocketTask(with: socketURL)
webSocketTask.resume()
// 2. Отправка сообщения (текст или данные)
let message = URLSessionWebSocketTask.Message.string("Привет, сервер!")
webSocketTask.send(message) { error in
if let error = error {
print("Ошибка отправки: (error)")
}
}
// 3. Прием сообщений (рекурсивный вызов для непрерывного прослушивания)
func listen() {
webSocketTask.receive { result in
switch result {
case .success(let message):
switch message {
case .string(let text):
print("Получен текст: (text)")
case .data(let data):
print("Получены данные: (data)")
@unknown default:
break
}
self.listen() // Слушаем следующее сообщение
case .failure(let error):
print("Ошибка приема: (error)")
}
}
}
listen()
// 4. Закрытие соединения
webSocketTask.cancel(with: .normalClosure, reason: nil)
Типичные сценарии использования: чаты, онлайн-игры, биржевые тикеры, live-уведомления, совместное редактирование документов.