Skip to main content

Socket

Про сокет в Википедии.

Кейсы, когда нужны именно сокеты, когда сервер должен иметь возможность в любой момент что-то сообщить:

  • обновление положения такси на карте
  • обновление статуса выполнения заказа
  • чаты
  • биржи
  • и т.д.

HTTP-запросы также построены на базе сокетного соединения:

  • открывается сокетное соединение
  • отправляются какие-то данные
  • в ответ также что-то отправляется
  • соединение прерывается

Если сокет открыт вручную — то такое соединение можно долго держать открытым, оно не закроется после одного запроса.
Push Notifications также работают на базе сокетного соединения. Как только сервер узнает, что пользователей нужно о чём-то уведомить — отправляет в этот сокет сообщение с информацией.

Также для удобной работы с сокетами необходима обработка ситуации потери связи — переподключение.

Пример реализации сокета на Android.

WebSocket

В чём разница между Socket и WebSocket.
WebSocket простыми словами.
WebSocket. Что это такое? Как с этим жить? — видео от Mad Brains.

Видео про работу с сетью через WebSocket + OkHttp. Статья о том, как использовать WebSocket на iOS 13. Статья про WebSocket на Android с OkHttp WebSocket в Ktor.
Гайд от Ktor, как работать с WebSocket.

SocketIO

Официальный сайт библиотеки
Статья
Ещё описание

Если кратко, то SocketIO — это тот же WebSocket, но с другим протоколом обмена данными внутри. То есть не получится на одной стороне использовать SocketIO, а на другой — просто WebSocket.

Прочитайте статью о разнице между веб-сокетами и Socket.IO — там будут примеры на JS, не пугайтесь :)

Использование SocketIO на Android.

Если ваш сервер использует SocketIO, то вы также можете использовать библиотеку moko-socket-io на стороне клиента.

Страница про запросы, с картинками.

Long Polling-запросы

Также следует знать ещё об одном типе запросов — Long Polling.

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

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

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