Andrey Suslov
июль 2015.
60106

Почему счётчик ВКонтакте, который отображает время ухода пользователя из сети, всегда такой неправильный?

Ответить
Ответить
Комментировать
0
Подписаться
8
7 ответов
Поделиться

При использовании браузера понятие онлайна весьма условное, т.к. протокол HTTP основан на транзакциях, а не на постоянном соединении, как протоколы большинства мессенджеров. Браузер пользователя запросил страницу, сервер её сгенерил и отдал, одновременно поимев возможность куда-нибудь залогировать этот факт, и всё. После этого на стороне сервера нет никакой [достаточно надёжной для использования в продакшене] технической возможности понять, открыта ли всё ещё у пользователя эта страница или уже нет. В особенности невозможно по-нормальному отловить момент закрытия единственной вкладки с сайтом и отправить в этот момент запрос про оффлайн.

Поэтому традиционно в вебе считается, что пользователь онлайн какое-то определённое время с момента загрузки последней страницы. У ВКонтакте это время равно 15 минутам, при этом last seen - это то самое время последней загрузки страницы сайта (возможно, шлются ещё какие-то периодические запросы в фоне) или запроса activity.online при использовании приложения. Именно из-за этого получается так, что пользователь был онлайн, а потом ВНЕЗАПНО стал "заходил 15 минут назад". Last seen может быть меньше 15 минут назад в двух случаях:
а) была нажата кнопка "выход" на сайте
б) был отправлен запрос API activity.offline, например, приложенька для Android в него точно умеет

Надеюсь, удовлетворил ваше любопытство.

327

Неа. Все действия типа переписки сидят на сокетах, и контент обновляется моментально. Вам написали — тут же получили, без рефреша страницы.

+5
Ответить

когда обновление, Гришка?

+13
Ответить

за чем так тежело я непонимаю

+24
Ответить
Ещё 12 комментариев

Сергей, нет, не на сокетах, а на long poll.

Василий, когда доделаем и оттестируем.

Настя, если знаешь, как сделать проще - предлагай ;)

(почему тут нет нормальных ответов на комменты?)

+39
Ответить

Григорий, ок, ну это уже технические тонкости, суть в том, что информацию можно обновлять моментально. По остальному согласен.

+1
Ответить

Я не понял. Объясните мне ещё раз, пожалуйста. Буду очень рад.

+3
Ответить

И где ты сейчас ?

+1
Ответить

а есть какие-нибудь расширения для браузеров, чтоб оставаться офлайн?

+1
Ответить

Дима, я пользуюсь VK inviz. Правда, для меня он не совсем удобен, не такой функциональный, как хотелось бы, но хотя бы позволяет оставаться оффлайн.

+1
Ответить

Почему на андроиде человек выходит в оффлайн и это почти сразу отражается (был в сети 5 минут назад), а на айфоне спустя такое же время, как и на компе (был в сети 15-20 минут назад)?

+1
Ответить

Юрий Григоренко, просто гуглите каждое непонятное слово. Но аккуратно, так и кодить можно научиться

+24
Ответить

Кристина, в ответе написано, что приложение для андроида отправляет специальный запрос, когда его сворачивают, и благодаря этому онлайны более точные. Приложение для айфона этого не делает, поэтому для него действуют "общие" правила.

Саша, нигде.

+2
Ответить

Почему именно 15 минут? Почему не 10 например?

+1
Ответить

Почему в телеграмме тогда онлайн отображается моментально после сворачивания

+1
Ответить

Потому что телеграм не использует HTTP, у него свой протокол. Но если прибить процесс клиента, то онлайн тоже не сразу пропадёт.

+2
Ответить
Прокомментировать

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

Если нажимать на кнопку "Выйти", то человек сразу же из сети пропадет.

20

О боже, а что тогда это ?

Last seen может быть меньше 15 минут назад в двух случаях:

а) была нажата кнопка "выход" на сайте

0
Ответить
Прокомментировать

Вконтакте поставила ограничение на 15 минут, потому что многие пользователи выходят из сети буквально на 5 минут, а потом возвращаются обратно, и ставить статус оффлайн в таком случае не совсем правильно.

14
Прокомментировать

Для тех, кому «сложна».

Вы – сервер Вконтакте. Сидите такой за столом, читая и отправляя письма. Вам приходят письма-запросы – некие «заказы» на выполнение определённо действия. Например, «пришли все новые мемы в ленту новостей» – вы собираете все посты из подписок этого человека и отправляйте ему в письме. Или «Есть ли новые сообщения?» – смотрите есть ли конверты для этого получателя, если да, высылаете.

Также вы ведете журнал кто и когда был в сети. И здесь возникает проблема, о которой вы спросили. Вы знаете, что человек точно в сети, только лишь когда получаете от него запрос о чем-либо. А дальше понять читает ли он ваш ответ, либо давно закрыл вкладку, никак нельзя; вы не постоянно на связи, как по телефону, например. Потому, как написал Григорий, вы решили, что человек вышел из сети, если он 15 минут ничего спрашивал.

10

С клиентом на Андроид гадать уже не нужно: перед выходом он успевает отправит специальный запрос «Я не в сети!», и вы спокойно запишете время получения в ваш журнал.

0
Ответить
Прокомментировать

а мне поддержка ответила более кратко( 

Здравствуйте, Рома!

Так происходит, если человек просто закрывает браузер и не нажимает кнопку «Выйти». Системе требуется время, чтобы обновить информацию.

Ваша Команда поддержки

Рома Прохоровотвечает на ваши вопросы в своейПрямой линии
5
Прокомментировать
Читать ещё 2 ответа
Ответить