сокет.ввод-вывод против swr для обновления содержимого в реальном времени

#reactjs #socket.io #next.js #swr

#reactjs #socket.io #next.js #swr

Вопрос:

В настоящее время я создаю веб-приложение с next.js , который требует обновлений в режиме реального времени на всех устройствах, например, если кто-то присоединяется к группе, это должно быть немедленно показано для всех существующих членов группы.

На данный момент я изначально извлекаю данные для пользователя при загрузке страницы и использую socket.ввод-вывод для обновления содержимого при необходимости. Однако я только что обнаружил фреймворк SWR, который автоматически обновляет содержимое при изменении тела запроса.

Мой вопрос: мне лучше придерживаться моего текущего подхода или использовать SWR-хук? На данный момент при загрузке страницы извлекается довольно много данных, например, группы, настройки и т. Д., Но было бы эффективнее, если бы я использовал несколько перехватов SWR для извлечения групп, настроек и т. Д. Отдельно?

Комментарии:

1. Я бы посмотрел на Meteor. То, что вы описываете (передача данных клиентам при внесении изменений на сервере), является одной из его ключевых функций. В некотором смысле он делает то, что, по вашему мнению, должен был делать SWR (и что, оптимистично, я сначала подумал, что это тоже так).

Ответ №1:

Я не думаю, что SWR делает то, что вы ожидаете от него. Это помогает вам отправлять хороший HTTP-запрос, кэшировать его и обновлять при необходимости (например, изменение реквизита, монтирование компонента, через определенное время). Ближайшая вещь, которую он делает для сокета, может быть «опрос по интервалу».

Например, вы можете настроить SWR на обновление данных каждые 5 секунд, но на самом деле это не соединение «в реальном времени». Я бы сказал, если вашему контенту требуются обновления в режиме реального времени, придерживайтесь socket. Если вы хотите загружать содержимое с HTTP-сервера, кэшировать и время от времени проверять его заново, SWR — это ваш инструмент.

Ответ №2:

Поскольку useSwr полагается на HTTP, он гораздо более масштабируемый, чем websockets, которые привязывают ваших клиентов к определенным серверам на срок до нескольких часов.

Да, обновление каждые 5 секунд с помощью swr не выполняется в режиме реального времени, но если это служит вашим целям, использование swr будет более надежным при росте трафика.