Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: онлайн передача событий между пользователями
 
 автор: tima2010   (26.03.2012 в 14:42)   письмо автору
 
 

Привет!

Задумался я над тем как реализован механизм таких вещей как:
Пользователь печатаем Вам сообщение...

К примеру два посетителя ведут переписку на сайте.
Один набирает текст второй видит что посетитель пишет. Как это реализовано?

Каков принцип работы таких скриптов?

Или к примеру посетителю приходит новое сообщение, и ему всплывает оповещение, как это реализовано? Не обновлять же страницу каждые 5 секунд.

спасибо.

  Ответить  
 
 автор: task   (26.03.2012 в 14:47)   письмо автору
 
   для: tima2010   (26.03.2012 в 14:42)
 

Инициатором запросов выступает клиент, это означает, что обновлять, только Ajax использовать.

  Ответить  
 
 автор: tima2010   (26.03.2012 в 15:19)   письмо автору
 
   для: task   (26.03.2012 в 14:47)
 

Да все реализовано на Ajax
Допустим посетитель написал сообщение, Ajax запросом отправляем данные в файл который записывает все в базу.

Но как теперь оповестить человека которому адресовано это сообщение?

Для того чтобы получатель получил оповещение нужно постоянно проверять базу данных на наличие новых?

  Ответить  
 
 автор: Sfinks   (26.03.2012 в 15:24)   письмо автору
 
   для: tima2010   (26.03.2012 в 15:19)
 

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

  Ответить  
 
 автор: task   (26.03.2012 в 15:43)   письмо автору
 
   для: Sfinks   (26.03.2012 в 15:24)
 

Не обновлять страницу, а посылать запрос каждые... По существу это тоже самое, только в рмках области страницы.

  Ответить  
 
 автор: Valick   (26.03.2012 в 16:03)   письмо автору
 
   для: task   (26.03.2012 в 15:43)
 

ну обновление, подразумевает обработку ответа от сервера, а ответа может и не быть

  Ответить  
 
 автор: task   (26.03.2012 в 16:06)   письмо автору
 
   для: Valick   (26.03.2012 в 16:03)
 

И что? Это как-то меняет суть того, что запросы на обновление производить все равно придется?
Тем более, что в данном случае ответ все-таки необходим.

  Ответить  
 
 автор: task   (26.03.2012 в 15:30)   письмо автору
 
   для: tima2010   (26.03.2012 в 15:19)
 

Ваша база данных должна выполнять роль "барышни на коммутаторе". При каждом ajax-запросе проверять, есть ли новые (по времени) сообщения для пользователя (по его id).

  Ответить  
 
 автор: tima2010   (26.03.2012 в 17:44)   письмо автору
 
   для: task   (26.03.2012 в 15:30)
 

хорошо, а если онлайн > 500 посетителей и каждые 3-7 секунды отправляется запрос в базу есть новая запись или нет? Разве это не плоховато?

А как быть на счет: tima2010 печатает Вам сообщение.
Это же нельзя проверить запросами? Получается по событие keypress от пользователя постоянно отправляется запрос в базу и записывает время, что посетитель нажал кнопку
А со стороны получателя каждую секунду проверяет была ли нажата кнопка секунду назад или нет?

Может все таки есть какое то другое решение?

  Ответить  
 
 автор: task   (26.03.2012 в 17:51)   письмо автору
 
   для: tima2010   (26.03.2012 в 17:44)
 

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

  Ответить  
 
 автор: tima2010   (15.04.2012 в 20:47)   письмо автору
 
   для: task   (26.03.2012 в 17:51)
 

Сильная ли будет нагрузка при таком коде?


$(document).ready(function(){

    setInterval(function(){
    $("#div").load('test.php');
    }, 1000); 


});

  Ответить  
 
 автор: confirm   (16.04.2012 в 10:10)   письмо автору
 
   для: tima2010   (15.04.2012 в 20:47)
 

А зачем так часто? Да не пойдет такая реализация.

  Ответить  
 
 автор: tima2010   (16.04.2012 в 12:42)   письмо автору
 
   для: confirm   (16.04.2012 в 10:10)
 

Да частоту для примера поставил, к примеру каждые 10 сек (10000)

Какая реализация будет разумной?

  Ответить  
 
 автор: confirm   (16.04.2012 в 13:10)   письмо автору
 
   для: tima2010   (16.04.2012 в 12:42)
 

Вам говорили, что сервер в данном случае должен быть барышней, а вы же даже не конкретизируете - "Барышня, мне Смольный".
Если кто-то кому-то пишет, это еще не означает, что он непременно это отправит. Из этого следует, что в большей мере в данном случае должна быть проверка флага, который устанавливается при нажатиях, и который должен информировать об активности пользователя. Этот флаг и надо проверять, сбрасывая его, если пользователь раздумал, либо слишком задумался, а это тоже механизм, но исключительно на клиенте.
Если же он отправляет свое послание, то этот флаг также должен быть сброшен, и кроме этого остановлен таймер опроса флага, и возобновляться только спустя N-времени после отправки сообщения.
И запросы проверяющие флаг активности, и запрос отправки сообщения, все это должно идентифицировать клиента, чего в вашем запросе нет - барышня вас не поймет.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования