Socket
Про сокет в Википедии.
Кейсы, когда нужны именно сокеты, когда сервер должен мочь в любой момент что-то сообщить:
- обновление положения такси на карте
- обновление статуса выполнения заказа
- чаты
- биржи
- и тд.
Http запросы также построены на базе сокетного соединения:
- открывается сокетное соединение
- отправляются какие-то данные
- в ответ также что-то отправляется
- соединение прерывается
Если сокет открыт вручную - то такое соединение можно долго держать открытым, оно не закроется после одного запроса.
Push Notifications также работают на базе сокетного соединения. Как только сервер узнает, что пользователей нужно о чем-то уведомить - отправляет в этот сокет сообщение с информацией.
Также, для удобной работы с сокетами необходима обработка ситуации потери связи - реконнект.
Пример реализации сокета на Android.
WebSocket
В чем разница между Socket и WebSocket.
WebSocket простыми словами.
Web Socket. Что это такое? Как с этим жить? - видео от Mad Brains.
Видео про работу с сетью через WebSocket + OkHttp.
Статья о том, как использовать WebSocket на iOS 13.
Статья про WebSocket на Android с OKHttp
WebSocket в Ktor.
Гайд от Ktor, как сделать чат используя WebSocket и KMM.
SocketIO
Официальный сайт библиотеки
Статья
Еще описание
Если кратко, то SocketIO
это тот же WebSocket, но с другим протоколом обмена данными внутри. Т.е. не удастся на одной из сторон клиент/сервер использовать SocketIO
, а на другой просто WebSocket.
Прочитайте статью про разницу между веб-сокетами и Socket.IO там будут примеры на JS, не пугайтесь :)
Использование SocketIO на Android.
Если ваш сервер использует SocketIO, то вы также можете использовать библиотеку moko-soсket-io на стороне клиента.
Страница про запросы, с картинками.
LongPooling-запросы
Также, следует знать про еще один тип запросов - LongPooling-запросы
Это более простая и "ленивая" замена сокетам. Как правило, подходит в том случае, если нам не нужно реализовывать систему реального времени. Как это выглядит:
- клиент отправляет запрос на сервер, у этого запроса очень большое время ожидания ответа
- сервер ответит только тогда, когда у него появится что-то новое по запросу клиента, что-то, что он еще не отправлял
- если ничего нового нет, сервер просто ждет, когда появится что-то новое
- если время ожидания ответа истекло, клиент тут же повторит запрос
- как только клиент получит ответ на запрос, он сразу же его продублирует
Для работы таких запросов эту механику необходимо реализовать на сервере. В добавок, для поддержки такого соединения трафика требуется больше, чем для поддержки сокетного.