|
|
|
| Привет!
Задумался я над тем как реализован механизм таких вещей как:
Пользователь печатаем Вам сообщение...
К примеру два посетителя ведут переписку на сайте.
Один набирает текст второй видит что посетитель пишет. Как это реализовано?
Каков принцип работы таких скриптов?
Или к примеру посетителю приходит новое сообщение, и ему всплывает оповещение, как это реализовано? Не обновлять же страницу каждые 5 секунд.
спасибо. | |
|
|
|
|
|
|
|
для: tima2010
(26.03.2012 в 14:42)
| | Инициатором запросов выступает клиент, это означает, что обновлять, только Ajax использовать. | |
|
|
|
|
|
|
|
для: task
(26.03.2012 в 14:47)
| | Да все реализовано на Ajax
Допустим посетитель написал сообщение, Ajax запросом отправляем данные в файл который записывает все в базу.
Но как теперь оповестить человека которому адресовано это сообщение?
Для того чтобы получатель получил оповещение нужно постоянно проверять базу данных на наличие новых? | |
|
|
|
|
|
|
|
для: tima2010
(26.03.2012 в 15:19)
| | Но это же не значит "обновлять страницу каждые 5 секунд". А делать запрос к файлу, который проверит есть новые сообщения или нет. По-моему это разные вещи. | |
|
|
|
|
|
|
|
для: Sfinks
(26.03.2012 в 15:24)
| | Не обновлять страницу, а посылать запрос каждые... По существу это тоже самое, только в рмках области страницы. | |
|
|
|
|
|
|
|
для: task
(26.03.2012 в 15:43)
| | ну обновление, подразумевает обработку ответа от сервера, а ответа может и не быть | |
|
|
|
|
|
|
|
для: Valick
(26.03.2012 в 16:03)
| | И что? Это как-то меняет суть того, что запросы на обновление производить все равно придется?
Тем более, что в данном случае ответ все-таки необходим. | |
|
|
|
|
|
|
|
для: tima2010
(26.03.2012 в 15:19)
| | Ваша база данных должна выполнять роль "барышни на коммутаторе". При каждом ajax-запросе проверять, есть ли новые (по времени) сообщения для пользователя (по его id). | |
|
|
|
|
|
|
|
для: task
(26.03.2012 в 15:30)
| | хорошо, а если онлайн > 500 посетителей и каждые 3-7 секунды отправляется запрос в базу есть новая запись или нет? Разве это не плоховато?
А как быть на счет: tima2010 печатает Вам сообщение.
Это же нельзя проверить запросами? Получается по событие keypress от пользователя постоянно отправляется запрос в базу и записывает время, что посетитель нажал кнопку
А со стороны получателя каждую секунду проверяет была ли нажата кнопка секунду назад или нет?
Может все таки есть какое то другое решение? | |
|
|
|
|
|
|
|
для: tima2010
(26.03.2012 в 17:44)
| | Ну а что поделать? Если есть опасность большой нагрузки, то выполняйте запросы реже.
А только проверка нажатий клавиш клиентом может указывать, что некто пишет сообщение, но отправлять запрос по каждому нажатию и даже секунду, разве есть смысл? | |
|
|
|
|
|
|
|
для: task
(26.03.2012 в 17:51)
| | Сильная ли будет нагрузка при таком коде?
$(document).ready(function(){
setInterval(function(){
$("#div").load('test.php');
}, 1000);
});
|
| |
|
|
|
|
|
|
|
для: tima2010
(15.04.2012 в 20:47)
| | А зачем так часто? Да не пойдет такая реализация. | |
|
|
|
|
|
|
|
для: confirm
(16.04.2012 в 10:10)
| | Да частоту для примера поставил, к примеру каждые 10 сек (10000)
Какая реализация будет разумной? | |
|
|
|
|
|
|
|
для: tima2010
(16.04.2012 в 12:42)
| | Вам говорили, что сервер в данном случае должен быть барышней, а вы же даже не конкретизируете - "Барышня, мне Смольный".
Если кто-то кому-то пишет, это еще не означает, что он непременно это отправит. Из этого следует, что в большей мере в данном случае должна быть проверка флага, который устанавливается при нажатиях, и который должен информировать об активности пользователя. Этот флаг и надо проверять, сбрасывая его, если пользователь раздумал, либо слишком задумался, а это тоже механизм, но исключительно на клиенте.
Если же он отправляет свое послание, то этот флаг также должен быть сброшен, и кроме этого остановлен таймер опроса флага, и возобновляться только спустя N-времени после отправки сообщения.
И запросы проверяющие флаг активности, и запрос отправки сообщения, все это должно идентифицировать клиента, чего в вашем запросе нет - барышня вас не поймет. | |
|
|
|