Диалог для стиля подключения REST vs Web Sockets
Сценарии относительно того, что следует использовать, когда и где.
Давайте углубимся и начнем с примера.
Большинство из нас знакомы с тяжеловесами компьютерных игр и игровых консолей, урожденных Xbox и PlayStation. В настоящее время выпускается много отличных игр, основанных на облаке. У обоих есть определенное очарование, связанное с ними, но точка, в которой облачные игры действительно превосходят консоли, заключается в том, что они не требуют интенсивного и тяжелого оборудования на стороне клиента (также известного как игрок), поскольку большая часть обработки и вычислений выполняется в облако. Один центр обработки данных может обслуживать десятки тысяч запросов в секунду. С другой стороны, Xbox и PS имеют одни из лучших игр, но большая проблема с ними заключается в их собственном оборудовании, поскольку каждый должен получить свое собственное, чтобы присоединиться к веселью. Если у нас есть кумулятив для консолей, мы получаем огромное количество.
Давайте рассмотрим другой пример, чтобы лучше понять, куда мы движемся.
Представьте, что вы генерал армии, находящейся в состоянии войны с другой страной. Помимо артиллерии, самое важное в вашем распоряжении — это то, насколько хорошо вы связаны со всеми своими подразделениями. Связь важна, и для этого используются рации. То, как работает рация, заключается в том, что мы нажимаем кнопку и произносим наше сообщение, а получатель слушает сообщение, а затем получатель следует тому же процессу. Хорошо, когда мы никуда не торопимся или у нас мало работы. Но когда вы находитесь в зоне активных боевых действий, даже миллисекундная задержка может причинить большой вред, поэтому линия между получателем и отправителем должна оставаться открытой на это время. Это экономит много времени на нажатие кнопок и другие хлопоты.
О ОТДЫХЕ
REST — это стандартизированный способ структурирования API для запросов. REST означает передачу репрезентативного состояния. Это еще одна абстракция для стандартизированного создания API для приложений. Таким образом построено подавляющее большинство приложений. REST использует общие глаголы HTTP, такие как GET, POST, PUT и т. д., для отправки и получения данных. Это очень полезный метод для создания приложений, поскольку он дает множество способов подключения к серверу и передачи данных, но у способа создания соединений для передачи есть существенный недостаток. Всякий раз, когда создается HTTP-соединение, также создаются определенные накладные расходы. Это необходимо, и объяснение этого выходит за рамки данной статьи. Когда много таких вызовов создаются в очень быстрой последовательности, это приводит к перегрузке в сети, и накладные расходы обычно поглощают всю полосу пропускания, которая нам не нужна.
Приложения, в которых используется REST:
Дизайн API, веб-приложения, которые создают запросы на основе событий и т. д.
О сокетах
REST работает по принципу HTTP-соединения. Вы создаете соединение, выполняете передачу данных и закрываете соединение. Веб-сокеты также основаны на том же принципе, но разница в том, что мы можем держать соединение открытым столько, сколько захотим. Это устраняет недостатки REST, поскольку нам нужно создать соединение только один раз. Проблема с накладными решена. Вуаля!. Но у веб-сокетов есть своя проблема: поддержание постоянного соединения открытым в течение такого длительного времени также является сложным процессом, но в долгосрочной перспективе это выгодно. Не рекомендуется делать открытые подключения для небольших запросов. У нас есть ОТДЫХ для этого.
Приложения, в которых используются сокеты:
Приложения для чата, онлайн-игры, совместная работа с документами в реальном времени и т. д.
Теперь о примерах и аналогии
Консоли и нажатие кнопок — это вызовы REST, а облачные игры + отсутствие подключения к кнопкам — это подключение к веб-сокетам. Когда интенсивно используется непрерывный обмен данными между клиентом и сервером через очень короткие промежутки времени, мы должны использовать соединение через веб-сокеты, поскольку оно имеет тенденцию держать соединение открытым до тех пор, пока не будут выполнены все передачи. REST также может использоваться для того же, но проблема с REST заключается в том, что они создают накладные расходы каждый раз, когда создается соединение (консоли), потому что для создания соединения требуется много шагов, таких как, например, рукопожатия. Закрытие и открытие его снова и снова с интервалом в 1 мс может оказаться очень тяжелым для приложения или системы в целом. Это не говорит о том, что один лучше другого, потому что у обоих есть свои сильные стороны и соответствующие области применения. Скажем, нам нужно делать запрос каждые 30 минут, тогда было бы глупым решением оставлять соединение открытым так долго (веб-сокеты), поскольку оно будет потреблять только ненужную полосу пропускания. REST в основном используется в приложениях, которые не требуют интенсивного обмена данными через короткие промежутки времени, веб-сокеты используются именно в таких условиях.
В конце концов, это две стороны одной медали 💰. Оба необходимы и очень полезны в разных случаях использования, и разработчик должен тщательно решить, что использовать для повышения эффективности своего продукта.
Привет 🍻
Хлопайте 👏 и комментируйте! 🤷