Допустим, есть vk, у которого лайки обновляются спусть некоторое время или по событию, кто может объяснить, как это реализовано?
Ну, типа по какому событию там все обновляется.
JavaScript
Как на сайтах происходит постоянное обновление информации?
Ну слушайте, есть всего четыре способа:
1. AJAX:
Вы блюёте с опеределённой периодичностью, пример — каждую секунду, запросами «ну чё там у xoxлов?», сервер вам отвечает и про вас забывает. Через секунду всё повторяется. Примитивный таймер.
Минусы:
1. ОГРОМНЫЙ трафик и нагрузка для обоих сторон. Кажется, а что ту такого? А вот что: если ваш запрос занимает 2 КБ, посылается раз в секунду, то за сутки просто при открытой у пользователя странице у вас набегает 172 мегабайта трафика с обоих сторон. А теперь представьте, что пользователей тысячи. А часть ваших пользователей сидит не на бизлимитном интернете с мобильников. Рано или поздно, но вам настучат по голове — либо пользователи, либо хостер.
2. Задержка обновления информации у пользователя. Если вы не глупенький, вы будете стараться минимизировать количество запросов, увеличивая задержку между ними…
Long pooling:
Вы посылаете запрос, сервер его принимает и оставляет открытым какое-то время. Если что-то обновилось, сервер отсылает обновление клиенту и закрывает запрос. Клиент тут же посылает повторный запрос. Если ничего не обновлялось за заданное время, сервер также закрывает запрос.
Минусы:
1. трафик. Хотя и в десятки раз меньше, чем при непрерывной долбёжке запросами.
2. Одностороннее соединение.
SSE (server sent event): клиент устанавливает постоянное соединение, сервер шлёт обновления тогда, когда они появляются. Очень простая реализация на клиенте, красиво, удобно.
Минусы:
1. одностороннее соединение.
2. довольно нетривиальная реализация на сервере
Вебсокеты:
Устанавливается постоянное соединение. Сервер при обновлении шлёт клиенту нужную информацию, клиент также может отослать что-то серверу.
Минусы:
1. несовместим с очень старыми браузерами.
2. Реализация на сервере средней сложности.
Сейчас почти всегда используют вебсокеты. Все чаты, любое интерактивное обновление чего-либо — это вебсокеты. Мгновенное обновление, минимальный трафик и нагрузка.
SSE используется как аналог RSS-фида. Например, Фонд Викимедиа использует SSE для организации потока всех правок во всех его проектах (все языковые разделы Википедии и т. п.) для любых желающих. Двусторонняя связь в этом деле не нужна.
ВКонтакте, как ни странно, на сколько я помню, использует long pooling. И неизвестно почему (это обсуждалось в инете). Вероятно, в целях совместимости со старыми браузерами и всеми экзотическими и старыми мобильными платформами.
1. AJAX:
Вы блюёте с опеределённой периодичностью, пример — каждую секунду, запросами «ну чё там у xoxлов?», сервер вам отвечает и про вас забывает. Через секунду всё повторяется. Примитивный таймер.
Минусы:
1. ОГРОМНЫЙ трафик и нагрузка для обоих сторон. Кажется, а что ту такого? А вот что: если ваш запрос занимает 2 КБ, посылается раз в секунду, то за сутки просто при открытой у пользователя странице у вас набегает 172 мегабайта трафика с обоих сторон. А теперь представьте, что пользователей тысячи. А часть ваших пользователей сидит не на бизлимитном интернете с мобильников. Рано или поздно, но вам настучат по голове — либо пользователи, либо хостер.
2. Задержка обновления информации у пользователя. Если вы не глупенький, вы будете стараться минимизировать количество запросов, увеличивая задержку между ними…
Long pooling:
Вы посылаете запрос, сервер его принимает и оставляет открытым какое-то время. Если что-то обновилось, сервер отсылает обновление клиенту и закрывает запрос. Клиент тут же посылает повторный запрос. Если ничего не обновлялось за заданное время, сервер также закрывает запрос.
Минусы:
1. трафик. Хотя и в десятки раз меньше, чем при непрерывной долбёжке запросами.
2. Одностороннее соединение.
SSE (server sent event): клиент устанавливает постоянное соединение, сервер шлёт обновления тогда, когда они появляются. Очень простая реализация на клиенте, красиво, удобно.
Минусы:
1. одностороннее соединение.
2. довольно нетривиальная реализация на сервере
Вебсокеты:
Устанавливается постоянное соединение. Сервер при обновлении шлёт клиенту нужную информацию, клиент также может отослать что-то серверу.
Минусы:
1. несовместим с очень старыми браузерами.
2. Реализация на сервере средней сложности.
Сейчас почти всегда используют вебсокеты. Все чаты, любое интерактивное обновление чего-либо — это вебсокеты. Мгновенное обновление, минимальный трафик и нагрузка.
SSE используется как аналог RSS-фида. Например, Фонд Викимедиа использует SSE для организации потока всех правок во всех его проектах (все языковые разделы Википедии и т. п.) для любых желающих. Двусторонняя связь в этом деле не нужна.
ВКонтакте, как ни странно, на сколько я помню, использует long pooling. И неизвестно почему (это обсуждалось в инете). Вероятно, в целях совместимости со старыми браузерами и всеми экзотическими и старыми мобильными платформами.
Это называется AJAX. Подробности лучше бы поискать.
Ойбек Буранов
та я знаю про ajax, но ведь он делает запрос по событию, верно?
может websocket
Похожие вопросы
- Каким образом или софтом можно скачать файлы массово с сайта? Фото сайта внутри.
- Объясните пожалуйста как это работает на примере сайта
- Не работает сайт
- Хочу сделать программу которая берёт данные с сайта и по ним строит график, подскажите в какую сторону податься?
- Помогите, пожалуйста, написать js код для обновления ссылки
- Срочно!! У меня есть сайт и мне от правообладателей пришло сообщение о том что удалить ссылки на скачивание на их товар
- Какие законы я могу неосознанно нарушить, выкладывая сайт в ин-ет?
- Подскажите сайт (ы) где показаны что добавили в js нового, чтобы список нововведений обновлялся
- Как сделать, что бы на сайте при помощи XMLHttpRequest постоянно обновлялась инфа с сервера?
- Сайт без подгрузок