Я часто в этом календаре упоминаю Твиттер, во многом, потому что это единственная большая социальная сеть, которой я пользуюсь каждый день: не смог разобраться в Фейсбуке, перестал заходить ВКонтакте, а Гуглплюс и вовсе закрыли.
На главной Твиттера, если разлогиниться, показывается основной слоган: See what’s happening in the world right now.
У твиттера за счёт централизации есть реалтайм: новые посты сами прилетают в ленту практически сразу. Но как в отсутствие твиттера, мои читатели узнают, что я опубликовал что-то новое?
Первый наивный ответ: зайди да посмотри, то есть, поллинг. Человек (или, чаще, программа) заходит на сайт и смотрит, нет ли чего нового. «Наивный» здесь не ругательство — это решение, которое решает большую часть проблемы и довольно легко в реализации.
Одним из первых подходов к проблеме был RSS (расшифровки: Rich Site Summary, полная выжимка сайта, Really Simple Syndication, Очень Простое Распространение). Это XML-документ, в котором можно описать ленту постов, и многие сайты в двухтысячных публиковали обновления сайтов в этом формате. У читателя, соответственно, должна быть читалка, которая понимает этот формат и ходит скачивать новую версию файла раз в какой-то промежуток времени.
В наши дни читатели часто используют не десктопные RSS-читалки, а веб-сервисы, что несколько решает проблему популярных сайтов: представь, что компьютеры сотни тысяч читателей запрашивают раз в пятнадцать минут этот файл — это сотни тысяч запросов. Feedbin и Feedly запрашивают файл один раз для всех своих пользователей.
Но у поллинга есть две проблемы: у многих сайтов не выйдет новых постов за этот час, то есть запросы происходят зазря, а с другой стороны, когда пост всё-таки выйдет, то я не узнаю о нём, пока читалка не скачает обновление через час. Поэтому появился WebSub — это протокол, где сайт присылает уведомление про новый пост. С этим протоколом всё не так просто: изначально он назывался PubSubHubbub (я не шучу); для него нужен хаб; чтобы получать апдейты, нужен сервер. В версии 0.4 появилась возможность публиковать в реалтайме не только обновления в RSS/Atom-лентах, но любых штук, доступных в вебе. Меня больше всего интересует h-feed на главной странице, список опубликованных постов.
Реалтайм требует работы от того, кто публикует контент. Для поддержки WebSub понадобятся три составляющие:
- Хаб: подписчики подписываются на нем на обновления, он рассылает новый контент подписчикам
- Две ссылки в виде тега link или http-заголовка Link: одна на себя (то есть, на обновления чего будут подписываться люди,
rel="self"
) и на хаб (rel="hub"
) - Пинг: каждый раз, когда обновляешь или публикуешь новый контент, нужно пингануть хаб, чтобы он получил новую версию
Superfeedr предоставляет бесплатные хабы (можно использовать «общий»: http://pubsubhubbub.superfeedr.com/
, но на своём будет дополнительная аналитика вида «сколько подписчиков»).
Теги добавить не сложно, единственное, что нужно быть аккуратным — rel="self" должен быть точным, без редиректов.
Пинг хаба — это просто POST-запрос с двумя параметрами: hub.mode=publish
и hub.url=урл_из_рел_селф
. Его можно делать вручную, а можно добавить пинг в скрипт, который делает деплой (если же сайт динамический, то можно рассматривать как часть логики публикации).
Таких фидов может быть много: например, фид на главную страницу, на категории постов, на ответы.
Подписываться на обновления несколько сложнее, и тот же Aperture до сих пор не поддерживает WebSub, полагаясь на поллинг, но всё ещё впереди.
Используя WebSub, мы можем сделать посты в вебе реалтаймовыми и без больших корпораций.