Ответ 1
Самая эффективная операция для того, что вы описываете, будет заключаться в использовании соединения webSocket между клиентом и сервером и отправке сервером обновленной информации о цене непосредственно клиенту через webSocket ТОЛЬКО, когда цена изменяется на какую-то значимую сумму или когда прошло некоторое минимальное количество времени, и цена изменилась.
Это может быть гораздо более эффективным, чем постоянный запрос клиента о новых изменениях цен и сроках получения новой информации клиенту.
Итак, если вам интересно, как быстро информация о новом уровне цен поступает на клиента, webSocket может получить его там гораздо более своевременно, потому что сервер может просто отправлять новую информацию о ценах непосредственно клиенту момент, который он изменил на сервере. Принимая во внимание, что с помощью вызова REST клиент должен опросить какой-то фиксированный временной интервал и будет получать только новые данные только в момент их интервала опроса.
WebSocket также может быть быстрее и проще в вашей сетевой инфраструктуре просто потому, что задействовано меньшее количество сетевых операций, чтобы просто отправить пакет по уже открытому соединению через WebSocket или создать новое соединение для каждого вызова REST/Ajax, посылая новые данные, затем закрытие соединения. Какая разница/улучшение, которое это делает в вашем конкретном приложении, будет тем, что вам нужно было бы измерить, чтобы действительно знать.
Но webSockets были разработаны для того, чтобы помочь в вашем конкретном сценарии, когда клиент хочет знать (как можно ближе к реальному времени, когда это возможно), когда что-то меняется на сервере, поэтому я определенно думаю, что это будет предпочтительный шаблон проектирования для этот тип использования.
Здесь сравниваются сетевые операции, связанные с отправкой изменения цены по уже открытому webSocket или вызову REST.
WebSocket
- Сервер видит, что цена изменилась и сразу отправляет сообщение каждому клиенту.
- Клиент получает сообщение о новой цене.
Отдых /Ajax
- Клиент настраивает интервал опроса
- При следующем триггере интервала опроса клиент создает соединение сокетов с сервером
- Сервер получает запрос на открытие нового сокета
- Когда соединение выполняется с сервером, клиент отправляет запрос на новую информацию о ценах на сервер
- Сервер получает запрос на новую информацию о ценах и отправляет ответ с новыми данными (если есть).
- Клиент получает новые данные о ценах
- Клиент закрывает сокет
- Сервер получает сокет close
Как вы видите, в вызове Rest/Ajax происходит гораздо больше с точки зрения сети, потому что для каждого нового вызова необходимо установить новое соединение, тогда как webSocket использует уже открытый вызов. Кроме того, в случаях с webSocket сервер просто отправляет новые данные клиента при наличии новых данных - клиенту не нужно регулярно его запрашивать.
Если информация о ценах не очень часто изменяется, в сценарии REST/Ajax также часто возникают вызовы "ничего не делать", когда клиент запрашивает обновление, но новых данных нет. В случае с сайтом WebSocket этот расточительный случай отсутствует, поскольку сервер просто отправляет новые данные, когда он доступен.