Большое объявление!
Я начал свой ежедневный путь обучения проектированию интерфейсных систем. И я буду делиться идеями из каждого модуля в блогах. Итак, вот начало, и впереди еще много всего!
В этом блоге мы рассмотрим различные механизмы получения данных, необходимые для проектирования интерфейсной системы, включая короткий опрос, длинный опрос, WebSockets, события, отправленные сервером (SSE) и веб-перехватчики. Каждый метод направлен на конкретные потребности в доставке данных на клиент и сервер и обратно, и их понимание имеет решающее значение для разработки масштабируемых веб-приложений, работающих в режиме реального времени.
Короткий опрос — это метод, при котором клиент повторно через регулярные промежутки времени отправляет запросы на сервер для проверки наличия обновлений.
setInterval(async () => { const response = await fetch('/api/get-posts'); const data = await response.json(); // Update UI with new data }, 5000); // Poll every 5 seconds
Например, тикер фондового рынка, ленты социальных сетей
Длинный опрос — это усовершенствование короткого опроса, при котором клиент отправляет запрос, а сервер удерживает соединение открытым до тех пор, пока не появятся новые данные для возврата.
Из серверной части ответ будет отправлен только при обновлении данных, до тех пор он будет удерживать запрос. Если обновлений нет в течение длительного времени, то обрабатывается таймаут.
Клиентская сторона
async function subscribe() { let response = await fetch("/subscribe"); if (response.status == 502) { // Status 502 is a connection timeout error, let's reconnect await subscribe(); } else if (response.status != 200) { // An error - let's show it showMessage(response.statusText); // Reconnect in one second await new Promise(resolve => setTimeout(resolve, 1000)); await subscribe(); } else { // Get and show the message let message = await response.text(); showMessage(message); // Call subscribe() again to get the next message await subscribe(); } } subscribe();
Например, чаты поддержки клиентов
WebSockets обеспечивают полнодуплексную связь между клиентом и сервером, что делает его наиболее эффективным методом передачи данных в реальном времени.
Клиент открывает соединение WebSocket с сервером, и клиент и сервер могут отправлять сообщения друг другу через это единственное соединение.
webSocket = new WebSocket(url, protocols); // Send message webSocket.send("Here's some text that the server is urgently awaiting!"); // Receive message webSocket.onmessage = (event) => { console.log(event.data); };
Например, приложения для живого чата, многопользовательские онлайн-игры
SSE обеспечивает однонаправленный поток обновлений от сервера к клиенту через HTTP-соединение.
const evtSource = new EventSource("ssedemo.php"); evtSource.onmessage = (event) => { const newElement = document.createElement("li"); const eventList = document.getElementById("list"); newElement.textContent = `message: ${event.data}`; eventList.appendChild(newElement); };
Например – ленты, уведомления
Вебхуки — это механизм связи между серверами, при котором сервер отправляет данные на заранее определенный URL-адрес при возникновении события. Клиенту не нужно постоянно проверять сервер на наличие обновлений.
Популярно используется для запуска действий между системами, таких как уведомления о платежах, события GitHub или интеграция сторонних сервисов.
Выбор правильного метода связи зависит от требований вашего приложения. WebSockets и SSE идеально подходят для передачи данных в режиме реального времени и потоковой передачи, а длительный опрос обеспечивает баланс между производительностью и простотой использования. Короткий опрос — это простое решение для нечастых обновлений, но оно может быть ресурсоемким, а веб-перехватчики идеально подходят для межсерверных уведомлений.
Каждая техника имеет свои преимущества и ограничения. Понимание этого может помочь вам принимать обоснованные решения для создания эффективных и адаптивных веб-приложений.
Этот блог открыт для предложений и обсуждений!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3