Skip to main content

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-запросы

Это более простая и "ленивая" замена сокетам. Как правило, подходит в том случае, если нам не нужно реализовывать систему реального времени. Как это выглядит:

  • клиент отправляет запрос на сервер, у этого запроса очень большое время ожидания ответа
  • сервер ответит только тогда, когда у него появится что-то новое по запросу клиента, что-то, что он еще не отправлял
  • если ничего нового нет, сервер просто ждет, когда появится что-то новое
  • если время ожидания ответа истекло, клиент тут же повторит запрос
  • как только клиент получит ответ на запрос, он сразу же его продублирует

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