Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как лучше реализовать оповещения на сайте.


Recommended Posts

Делаю сейчас систему внутренних сообщений(типа переписки с администратором) на сайте. Соответственно нужно регулярно проверять, пришло ли сообщение или нет.

Сейчас это сделано так 

$(document).ready(function() {
	viewMessage();
	setInterval(function(){ 
		viewMessage();
	}, 5000);
});

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

 

Вопрос, насколько это правильно? Есть ли более простое решение? Есть такая фича http://caniuse.com/#feat=eventsource но она не кроссбраузерна.

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

Надіслати
Поділитися на інших сайтах

а почему не повесить вызов на событие, например при успешно отправленном сообщении

дергать бд лишний раз каждый 5 секунд - имхо, не правильно

Змінено користувачем Einshtein
Надіслати
Поділитися на інших сайтах


Einshtein прав, а если будет 1000+ пользователей на сайте одновременно,  сервер умрет (если дешевый)

Надіслати
Поділитися на інших сайтах

Что значит повесить вызов на событие? Повесить вызов мы можем на то событие, что сами и совершили.

 

А на событие, что совершил другой пользователь?

Например, админ успешно отправил сообщение пользователю, мы ж не можем никаким образом отследить время наступления этого события из-под пользователя.

Змінено користувачем pashast
Надіслати
Поділитися на інших сайтах

Что значит повесить вызов на событие? Повесить вызов мы можем на то событие, что сами и совершили.

 

А на событие, что совершил другой пользователь?

Например, админ успешно отправил сообщение пользователю, мы ж не можем никаким образом отследить время наступления этого события из-под пользователя.

Если запрос ушел Аяшкой он вернет успех, вот и тут и вызываем что нужно  

Надіслати
Поділитися на інших сайтах

Если запрос ушел Аяшкой он вернет успех, вот и тут и вызываем что нужно  

Ушел от от админа, админ и получит то что надо.

А пользователь, которому ушло сообщение, как получит результат без дергания бд?

Змінено користувачем pashast
Надіслати
Поділитися на інших сайтах

Что значит повесить вызов на событие? Повесить вызов мы можем на то событие, что сами и совершили.

 

А на событие, что совершил другой пользователь?

Например, админ успешно отправил сообщение пользователю, мы ж не можем никаким образом отследить время наступления этого события из-под пользователя.

ну почему, мы же можем повесить цель яндекса на успешный заказ, запихнув его в addtocart , или confirm, или куда там нужно

почему бы так же не сделать с чатом, или что там у тебя

Змінено користувачем Einshtein
Надіслати
Поділитися на інших сайтах


пока только такой вариант лебезит в голову, но он тоже не очень,

 

если пользователь отправляет сообщения присваиваем ему идентификатор, что то типа sesion = true в localstorage и проверяем если true дергаем базу с интервалом в 5 минут, так хотя бы не будем на столько нагружать бд 

Надіслати
Поділитися на інших сайтах

ну почему, мы же можем повесить цель яндекса на успешный заказ, запихнув его в addtocart , или confirm, или куда там нужно

почему бы так же не сделать с чатом, или что там у тебя

А что если яндекс не даст мне посмотреть исходники серверной части своей яндекс.метрики.  :-)

 

пока только такой вариант лебезит в голову, но он тоже не очень,

 

если пользователь отправляет сообщения присваиваем ему идентификатор, что то типа sesion = true в localstorage и проверяем если true дергаем базу с интервалом в 5 минут, так хотя бы не будем на столько нагружать бд 

Это чтобы не сразу начинать дергать базу, а только после отправленного собщения. Немного поможет, думаю

 

Надіслати
Поділитися на інших сайтах

Ребята а зачем дергать БД

Забыли про PUSH ?

 

https://www.google.com/search?q=push+сообщения+php

Надіслати
Поділитися на інших сайтах

Работает в 2х браузерах только

Во всех работает эта технология. Просто реализация нужна грамотная

Вы думаете как работают push сообщение google, facebook и т п  во всех браузерах ;)

Надіслати
Поділитися на інших сайтах

Во всех работает эта технология. Просто реализация нужна грамотная

Вы думаете как работают push сообщение google, facebook и т п  во всех браузерах ;)

http://caniuse.com/#feat=push-api

хром, фф

Надіслати
Поділитися на інших сайтах

Гугл в ютубе использует больше чем 50 форматов для отдачи видео, в зависимости от браузера. Думаю там с пушами таже ситуация.

Надіслати
Поділитися на інших сайтах

Во всех работает эта технология. Просто реализация нужна грамотная

Вы думаете как работают push сообщение google, facebook и т п  во всех браузерах ;)

Я немного не то имею ввиду. Скажем так в кавычках "push" технология, не браузерная, которую используют уже давно

К примеру пришло сообщение и при записи в БД генерируется JS код тому customer_id который должен его принять. А ajax - м просто дергаете этот json файл кеш на сервере. Зачем БД дергать еще?

Надіслати
Поділитися на інших сайтах

Я немного не то имею ввиду. Скажем так в кавычках "push" технология, не браузерная, которую используют уже давно

К примеру пришло сообщение и при записи в БД генерируется JS код тому customer_id который должен его принять. А ajax - м просто дергаете этот json файл кеш на сервере. Зачем БД дергать еще?

Да ну, спорное решение, не думаю что файловый кеш будет быстрее бд.

Если будет тормозить, вынесем на отдельный сервер бд с сообщениями  :-)

Надіслати
Поділитися на інших сайтах

Вопрос, насколько это правильно? Есть ли более простое решение?

 

 

Ну.. оно и так простое

Я предпочитаю, setTimer в колбеке

В js-скрипте считать количество запросов, и в случае "переполнения" - останавливать.

 

Можно на сокетах опрашивать

Надіслати
Поділитися на інших сайтах

Ищите long pooling и push уведомления. Но это уже серверная технология и ее немного трудней внедрять. Работает эта технология так:

 

С помощью js клиент соединяется с PUSH/Long pool сервером и ждет уведомлений, на протяжении ожидания (30 сек) канал клиент/сервер постоянно открыт. Если на сервере появляется событие, то оно сразу отправляется клиенту по открытому клиентом каналу. Затем, после получения сообщения, клиент снова соединяется и ждет новых уведомлений. Если уведомления не поступили за время ожидания (30 сек), то клиент разрывает связь и открывает ее снова. Таким образом реализованы сообщения в вконтакте и других соц сетях. При этом, если использовать нормальный софт, а не nginx/PHP+MySQL сервер сильно не грузится. Хотя в nginx, вроде была поддержка long pool и он тоже, вроде как, держится. Еще видел скрипт мультиплексор на питоне, он охуенен, он поднять его мне не удалось.

 

Так же видел платные/бесплатные push сервера с готовым API.

 

Еще есть jquery.javascript xmpp клиенты. 

 

А по идее если клиентов мало, то париться особо не стоит, вполне хватит setTimeout, только вот желательно всю архитектуру OpenCart не поднимать, а сделать отдельным скриптом с минимумом кода и запросов. 

Змінено користувачем halfhope
Надіслати
Поділитися на інших сайтах

С помощью js клиеотя в nginx, вроде была поддержка long pool и он тоже, вроде как, держится. 

Нагуглил уже это, попробую поднять https://www.nginx.com/resources/wiki/modules/push_stream/#

Надіслати
Поділитися на інших сайтах

Нагуглил уже это, попробую поднять https://www.nginx.com/resources/wiki/modules/push_stream/#

расскажите потом что с этого получилось, интересно 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.