Realtime на вашем ресурсе за несколько минут
Из недостатков можно выделить только невозможность отправки сообщений на несколько каналов одновременно, на уровне самой библиотеки, что есть в realplexor, а так же отсутствие складирования нескольких ивентов, приходящих на канал, в короткий промежуток времени (время реконекта).
Немного ягугла помогло найти JS функцию, которая, на первый взгляд, решала проблему:
- Если на клиент пришло несколько ивентов, и сразу после этого следует рефреш страницы — они придут к вам еще раз (из кеша).
- Если вкладка была неактивной в течении длительного времени — реквест умирал, и больше не обрабатывался до рефреша страницы.
Первую проблему удалось устранить довольно просто, заменив
var etag = 0, lastModified = 0;
на
var etag = 0:
lastModified = LOAD_TIME;
где LOAD_TIME задавался константой в индексе, как
var LOAD_TIME ;
Вторую проблему, я надеялся, решить будет так же просто, заменив
timeout: 1000 * 60 * 60 * 24
на
timeout: 1000 * 20
создав принудительный реконект к nginx каждые Х секунд (в нашем случая оптимальным интервалом стало 20 сек).
Но начав тестирования, получил еще больше коллизий, чем было до этого – после реконектов начинался адский флуд ивентов. Спасибо console, за пояснение ситуации. Проблема была в том, что когда кверик делал реконект, обработчик complete продолжал обновлять данные по хедерам, в связи с чем следующий запрос уходил с If-None-Match и If-Modified-Since null.
В конце концов, получили максимально стабильную функцию:
Вызов обработчика ивентов выглядит примерно так:
Поскольку в примерах на сайте модуля нет кода, который мог бы отправлять сообещение сразу в несколько каналов, мы решили написать свою функцию.
Реализация на php:
С установкой Dklab Realplexor, никаких проблем не возникло и полная документация доступна на сайте (http://dklab.ru/lib/dklab_realplexor) разработчика.
Однако, с nginx_http_push_module не всё так просто, если честно, на CentOS готовый пакет, включающий данный модуль, найти не удалось, поэтому собирали всё из исходников.
Создадим папочку куда будем скачивать все необходимые элементы
Скачаем последние исходники с гитхаба:
Качаем последнюю версию nginx, в нашем случае это nginx-1.1.15
Качаем дополнительные необходимые библиотеки:
Переходим в папку с исходниками nginx’а
И конфигурируем nginx
теперь создадим файл /etc/init.d/nginx
и положим туда такой скрипт:
Всё. на этом установка nginx завершена, и можно запускать сервис nginx’a
Теперь перейдем к настройкам:
/publisher — служит для записи в канал и должен быть доступен только вашему серверу, иначе писать в него сможет кто угодно.
/listener – доступен всем и служит для раздачи сообщений подписчикам канала.
На этом по настройки всё. Решение всем хорошо, однако у нас возникли трудности с настройкой crossdomain-ajax, а в модуле, в главной ветке, поддержка jsonp, на данный момент, отсутствует. НО, был найден форк с данным функционалом (https://github.com/Kronuz/nginx_http_push_module). Его установка никак не отличается от оригинала.
Чтобы включить поддержку jsonp в раздел location /listener нужно добавить
Теперь, в случае передачи в параметр callback данных, модуль будет заворачивать данные в jsonp.
Что такое real-time маркетинг
Real-time маркетинг — это маркетинговая активность, которую компания предпринимает, реагируя на актуальные события.
Зачем нужен real-time маркетинг
Обычно событие происходит быстро, и реагировать тоже надо быстро. Зато своевременная реакция на актуальные новости помогает бренду привлечь дополнительное внимание и получить новые охваты.
Примеры real-time маркетинга
Ikea и стоппер для дверей Hodor
Игра престолов — инфоповод, который нельзя было игнорировать: в среднем сериал набирал 44,2 миллиона зрителей во время выхода серий, так что привлечь внимание даже 1% этой аудитории означало охват на 400 тысяч человек.
Впереди маленький спойлер, который ни на что не влияет.
Пятый эпизод шестого сезона раскрыл тайну персонажа по имени Ходор: оказалось, что это сокращённый вариант Hold the Door — «Держи дверь» — фраза, которую он кричал во время кризисного момента фильма. События этого эпизода захватили интернет, и этим воспользовалась Икея — они выпустили стоппер для дверей Hodor:
Источник
Кстати, это был не единственный момент, когда Икея обращалась к сериалу. Например, вот:
Источник
Стилизованные коробки от Додо пиццы к выходу «Дюны»
Фильмы вообще часто становятся поводом для реал-тайм маркетинга. Кстати, это пример, когда у маркетологов есть время подготовиться, ведь о выходе фильмов известно заранее.
Когда в 2021 году выходил долгожданный фильм «Дюна», команда Додо пиццы выпустили коробки, стилизованные под фильм:
Источник
Реакция брендов на пандемию коронавируса
Конечно, бренды не могли не реагировать на появление коронавируса.
В это время важно было давать правильный посыл и сохранять имидж хороших ребят.
- Некоторые бренды: Zara, Audi, Coca-Cola и другие — увеличили расстояния между символами в своих логотипах в рекламных материалах, напоминая, что важно соблюдать социальную дистанцию. Источник
- Американский интернет-провайдер AT&T отменил лимиты на использование интернета, чтобы помочь людям работать из дома.
- TimeOut (время вне дома) — ресурс для поиска мест, куда сходить, напомнил людям, что надо оставаться дома, на время став TimeIn (время дома):
Vizit и его real-time маркетинг в твиттере
У бренда презервативов Vizit популярный аккаунт в твиттере, где они быстро реагируют на актуальные события. Возможно, поэтому у них там 29 тыс. подписчиков. Если вы скажете, что это не так уж и много, то вспомните, что это твиттер. Естественно, новости они завязывают на сексуальные темы. Причём это касается не только самих твитов, но и ответов на комментарии:
Источник
Советуем подписаться, чтобы смотреть на интересные примеры real-time маркетинга.
Как отличить успешный real-time маркетинг от неуспешного
Поскольку все кампании разные, и у каждой свои метрики успеха, трудно дать универсальный совет по тому, как измерить успешность. Вот несколько вариантов, какие метрики можно измерять.
Количество упоминаний бренда в соцсетях. Если заметен рост, значит, компании удалось привлечь внимание аудитории.
Соотношение положительных и отрицательных отзывов в соцсетях. Внимание аудитории ещё не означает хорошего результата, ведь оно могло быть и негативным. Важно следить за соотношением положительно и отрицательно окрашенных постов с упоминанием бренда. Лучше всего, если негативных не более 10%.
Количество покупок. В некоторых случаях эффективность кампании real-time маркетинга можно измерить непосредственно в деньгах. Например, для той же Икеи, выпустившей стоппер для двери Hodor, или для Додо, стилизовавших упаковку для пиццы под Дюну, результат прозрачен — количество покупок и дополнительная прибыль за счёт них.
Как делать real-time маркетинг в своей компании
В примерах мы показали крупные бренды, но подобные акции доступны и для маленьких компаний. Например, когда Максим Ильяхов раскритиковал дайджесты Email Soldiers, команда ответила рассылкой «Максим, мы всё просрали!»
Да, маленькие команды с меньшей вероятностью увидят большой результат и тысячи упоминаний в соцсетях, однако это не значит, что не надо пробовать.
Что нужно помнить, если хотите делать real-time маркетинг:
- Всегда сохранять положительный образ бренда. Прежде чем что-то запустить, надо десять раз подумать, как это воспримут подписчики.
- Не шутить над трагедиями. Катастрофы, теракты, стихийные бедствия — это те события, с которыми нужно быть максимально аккуратными. Лучшая реакция брендов в таких случаях — помощь пострадавшим.
- Реагировать быстро. Это не всегда так. Например, пандемия растянулась надолго, и у брендов была возможность взять немного времени, чтобы придумать маркетинговую кампанию и вообще перестроиться под события. Кроме того, ситуация была новой для всего мира, поэтому неудивительно, что компании не сразу знали, как среагировать. Однако обычно всё происходит быстро: сегодня вулкан извергается, не давая самолётам летать, а через неделю все о нём уже забыли. Поэтому реагировать надо здесь и сейчас, ведь маркетинг не зря называется real-time маркетинг.
В целом real-time маркетинг — хорошая возможность привлечь дополнительное внимание. Главное — сохранить лицо бренда и среагировать быстро. Кампании real-time маркетинга невозможно спланировать, поэтому такое могут осуществить только творческие инициативные маркетинговые команды. Счастливы те компании, в которых именно такие маркетологи (а все несчастливые компании несчастливы по-своему).
Реал тайм что это
Войти
Авторизуясь в LiveJournal с помощью стороннего сервиса вы принимаете условия Пользовательского соглашения LiveJournal
Стратегии пошаговые и реал-тайм
Те, кто играл в компьютерные игры, знают, что стратегии бывают двух типов: пошаговые и реального времени.
Основная суть пошаговой стратегии заключается в том, что свои ходы противники делают по очереди. Сделал свой ход – и ждёшь пока ход сделает противник. Пока он не сделает свой ход – ты ничего не делаешь.
У стратегии реального времени другой формат: ты делаешь свои ходы постоянно и подряд, вне зависимости от того, сделал ли свой ход противник. Ты постоянно делаешь ходы в максимально быстром темпе. Конечно поглядывая при этом за противником и корректируя свои действия по ситуации, но всё же ты именно делаешь свои ходы первым и постоянно, а не ждёшь реакции противника и особо не реагируешь на его действия. Ходы противника учитываются, но всё же не они определяют основной поток твоих ходов. Даже вернее серии ходов.
Как ни странно, но и в реальной жизни точно также есть две такие стратегии: пошаговая и реал-тайм. И люди в большинстве своём придерживаются одной из этих стратегий.
Поясню на примерах.
— Драка.
Пошаговая стратегия: он ударил – ты ударил и ждешь пока он ударит – он ударил — ты ударил и ждешь пока он ударит…
Реал-тайм стратегия: он ударил (если вдруг успел) – ты начинаешь бить подряд пока не замочишь.
— Работа
Пошаговая стратегия: тебе сказали что надо сделать – ты сделал и ждёшь замечания – тебе выдали замечания – ты исправил замечания и ждёшь новые замечания или новое задание – тебе дали…
Реал-тайм стратегия: ты увидел что надо сделать и сделал – тебе дали ответную реакцию или замечания – ты исправил и попутно понял что надо еще сделать и сделал, плюс предложил ещё и другое, сделал это, предложил план на следующий период, начал его выполнять, по пути отслеживая реакцию, внося коррективы, идя дальше…
Практика показывает, что стратегия реал-тайм в жизни более выигрышна. При ней инициатива у тебя, количество действий (а значит и результатов) больше у тебя. Ты вследствие этого причинишь или максимальный урон противнику или максимальный положительный профит работе и Заказчику (т.е. себе). Причём твои ошибки будут иметь минимальные последствия – при таком высоком темпе противники не успеют ими воспользоваться, а заказчики в любом случае получат больше положительных результатов, чем ошибок (ошибки ты попутно или потом исправишь). Набранный темп и энергия позволят продавливать нужные решения, мотивировать всех к выполнению нужных тебе действий, сгладят недочёты. А главное – такой тип действий показывает всем что ты не отступишь, доведёшь дело до нужного тебе результата и потому лучше с тобой не спорить, а сделать сразу как ты хочешь. Плюс ты таким поведением даёшь полную ясность и определённость всем вокруг – всем становиться точно известно что надо делать, и с них снимается ответственность за решения и последствия.
Реал тайм что это
Начнем-ка мы рассматривать, полную подводными камнями, тему Real-Time программирования.Давайте для начала опишем то, что я понимаю под программным обеспечением такого рода.
Под это определение можно подвести любую ОС — умеющую работать с процессами и потоками в режиме разделения ресурсов и времени процессора. В том числе и Windows. Ведь реально события происходят: сетевые сообщения, нажатия кнопок пользователем и т.д. и т.п.
Сказать так все же было бы не верно.
Под системами реального времени (РВ в дальнейшем) понимают систему, отвечающую за управление каким-либо реальным процессом. ОС общего назначения, особенно многопользовательские, такие как UNIX/Windows, ориентированы на оптимальное распределение ресурсов компьютера между пользователями и задачами (системы разделения времени), В ОС РВ подобная задача отходит на второй план — все отступает перед главной задачей — успеть среагировать на события, происходящие на объекте. Это собственно и есть главная задача ОСРВ.
В отличии от ОС — есть программы, которые вынуждены быть программами РВ внутри не РВ операционных систем. К таковым в принципе относятся программы серверов (Apache), программы сетевых протоколов, типа различных ускорителей интернета и т.д.
Внутри Embeded system эти задачи становятся особенно актуальными, когда мы говорим о Wireless коммуникациях. Системам связи приходится постоянно следить за наличием сигнала, приходу вызовов от абонента, и т.д. Давайте рассмотрим несколько аспектов работы таких программ.
Для огромного числа программ РВ — существуют понятия потоков и процессов. Без понимания, чем они отличаются — дальше нам говорить нечего, поэтому давайте разберемся.
Процесс — самостоятельная единица ОС — имеющая доступ к собственной памяти из системных ресурсов, системы сообщений, собственный Instance, т.е. системный идентификатор.
Поток — процесс, имеющий ограничения — он не имеет собственного самостоятельного ID и обязательно должен быть связан с родительским процессом.
Для организации одновременной работы, как с клиентской частью, так и с постоянным, но нерегулярным притоком внешних событий, нам необходимо организовать, как минимум, один поток — отвечающий за работу с клиентом и второй с внешним источником информации, которым мы управляем. В этом случае у нас сразу же возникает первый подводный камень. Если в ждущем от управляемого объекта потоке, поставить обычный напрашивающийся цикл типа
мы окажемся в ситуации съедания 90% процессорного времени этим самым потоком.
Чтобы избежать попадания в такую ситуацию, мы обязаны использовать не просто цикл, а цикл с задержкой на время, пока сигнала нет. В каждой ОС — для внешних коммуникаций существует API, отвечающий за ожидание входящих событий. В WinCE, системе рекламирующейся Майкрософтом как РВ, существует функция WaitCommEvent для ожидания события на COM порте. Правда она же есть и в обычном Windows, но не в этом дело. Поток, который занимается ожиданием сигнала, висит на ожидании события, причем не всегда это приход каких-либо данных, а иногда и командное событие ждет, не занимая процессорное время. В случае если событий несколько, они организуются в систему флагов, которые после выхода из ожидания необходимо оценивать. В системе Nucleus мы имеем такую же систему API. Однако во всем этом мы увидим еще один подводный камушек. Выход из такого цикла невозможен, ибо ожидание внешних событий блокирует поток, если вдруг внешний управляемый модуль ничего не шлет, по причине поломки. В этом случае мы программно выйти можем только одним способом, поставить предварительно событие выхода, которое будет ждать следящий поток, наравне с событиями внешними. В этом случае если выясняется, что система сломана — возможен легальный выход из программы и закрытие потока внутренними программными средствами корректно, посылкой события выхода.
Оставим на время тему организации ожидания и вспомним, что кроме этого протоки должны обмениваться информацией между собой. Однако это не возможно организовать, так же как и в обычном однопоточном варианте, где в каждый момент времени, только одна область памяти подвергается чтению или изменению. Если мы используем общую переменную типа int, для передачи номера сигнала от ждущего процесса к ответственному за обработку, то в нашем случае мы обязаны соблюсти "приличия".
Например: ждущий поток заполнил переменную номером задания. Однако в процессе выполнения этого действия второй поток по приказу пользователя считывает эту переменную. В этом случае мы можем считать первые два байта нового значения, а вторые старого, т.к. на деле все равно не возможно точно знать, свободна ли переменная или нет. Для того, что бы избежать такой ошибки, мы обязаны предусмотреть защиту общей памяти от несанкционированного доступа в момент операций чтения/записи. Когда первый поток обращается к одному из общих мест в памяти задачи, то он должен проверить имеет ли он право на операцию. Если ответ да, то происходит захват ресурса, блокировка, затем процедура изменения содержимого и деблокировка, освобождение ресурса. Если во время блокировки, еще один поток попытается обратиться к этому же месту памяти, то он наткнется на блок, и будет ждать, пока первый не освободит ему ресурс.
В качестве домашнего задания — предлагаю вам сделать небольшой пример не на бумаге, а в голове. Что произойдет, если при чтении блокированного куска, первый поток будет заблокирован ожиданием освобождения доступа к памяти, а второй в процессе работы с данными, зависнет? И как такую ситуацию обойти? Я специально в тексте опустил эту деталь.