Небольшое iOS-приложение на SwiftUI для демонстрации работы с WebSocket через URLSessionWebSocketTask. Подключается к публичному echo-серверу, отправляет текстовые сообщения и отображает ответы в простом чате
Экран чата с историей сообщений, полем ввода и кнопкой отправки:
- Автоматическое подключение к WebSocket при открытии экрана
- Отправка и приём текстовых сообщений
- История чата с пузырями «Отправлено: …» и «Получено: …»
- Кнопка «Подключить» / «Отключить» в toolbar
- Оптимистичное отображение отправленных сообщений до ответа сервера
- Xcode с поддержкой iOS 26.5+
- Swift 5.0+
- Доступ в интернет (для
wss://echo.websocket.org)
- Откройте
WebSocket.xcodeprojв Xcode - Выберите симулятор или устройство
- Нажмите Run (⌘R)
При старте приложение автоматически подключается к echo-серверу. Введите текст в поле внизу экрана и нажмите кнопку с иконкой самолётика — сервер вернёт то же сообщение обратно
WebSocket/
├── WebSocketApp.swift # Точка входа приложения
├── ContentView.swift # UI чата, WebSocketManager, модель ChatMessage
└── Assets.xcassets # Иконка и цвета
| Компонент | Назначение |
|---|---|
ChatMessage |
Модель сообщения с уникальным UUID для корректного ForEach |
WebSocketManager |
Управление соединением, отправка и приём через URLSession |
ContentView |
Экран чата: список сообщений, поле ввода, toolbar |
┌─────────────┐ wss://echo.websocket.org ┌─────────────┐
│ ContentView │ ◄────────────────────────────► │ Echo-сервер │
└──────┬──────┘ └─────────────┘
│
▼
┌──────────────────┐
│ WebSocketManager │
│ connect() │ ──► URLSessionWebSocketTask.resume()
│ sendMessage() │ ──► webSocketTask.send(.string)
│ receiveMessages │ ──► рекурсивный receive { ... }
└──────────────────┘
connect()— создаётURLSessionWebSocketTask, вызываетresume()и запускает цикл приёмаsendMessage(_:)— отправляет строку на сервер; в UI сообщение добавляется отдельно вContentViewreceiveMessages()— после каждого успешного кадра снова регистрируетreceive, пока соединение открытоdisconnect()— закрывает сокет с кодом.normalClosure
Все обновления UI выполняются на @MainActor через Swift Observation (@Observable)
По умолчанию используется echo.websocket.org:
private let url = URL(string: "wss://echo.websocket.org")!Сервер возвращает отправленный текст без изменений. При подключении может прийти служебное сообщение вида Request served by …
Чтобы подключиться к другому серверу, измените URL в WebSocketManager
Учебный проект. Используйте свободно
