Intereting Posts
Требуется ли mysql_real_escape_string () при использовании подготовленных операторов? Как вызвать хранимую процедуру MySQL из PHP-кода? Вход в удаленный URL с помощью Curl -PHP PHP – получить все ключи из массива, которые начинаются с определенной строки Доктрина один-к-одному однонаправленная Как получить данные utf-8 с помощью php и показать правильную кодировку в dump-файле excelsheet? codeigniter, создающий каталог Предложения / Трюки для дросселирования скрипта PHP Многомерный массив Найти и обновить значение с помощью PHP PHP заполняет данные из базы данных при выборе района Телефонная география, подключенная к серверному API CURL Получить запрос с параметром, содержащим URL-адрес GET Как обрабатывать двойные кавычки в строке перед оценкой XPath? Различные методы кэширования файлов, плюсы и минусы Как я могу подсчитать общее количество встроенных функций в PHP?

Мгновенное уведомление с использованием php / mysql, пожалуйста, дайте мне общую идею

Кто-нибудь может сказать, как извлекать данные из базы данных, такие как уведомление Facebook. мое требование: у меня есть таблица пользователя и таблица сообщений, когда пользователю нужно отправить сообщение, запись делается в таблице сообщений с идентификатором пользователя отправителя и получателя. поэтому мне нужно показать статус нового входящего сообщения получателю в режиме реального времени.

Это очень похоже на ajax, за исключением того, что цель отличается: более открытые сокеты висят и меньше запросов против большего количества запросов и менее открытых сокетов. JS делает запрос на сервер (2 из них на самом деле), и сервер не отвечает немедленно, вместо этого зависает и спит, пока на самом деле данные не будут отправлены клиенту, и в этом случае он немедленно возвращает содержимое. Причина того, что у вас есть 2 открытых висячих запроса, состоит в том, что когда один из них разыгрывает второй, он все еще готов получать уведомления, в то время как один из них снова подключается. Таким образом всегда есть хотя бы один висячий запрос. Можно проверить APE, или COMET, или «reverse ajax», или «длительный опрос с помощью javascript». Есть преимущества и недостатки в использовании длинных опросов вместо классического опроса, я бы предложил вам посмотреть, какой из них лучше подходит вашему сценарию.

ура

Я знаю, что Facebook что-то делает с событием mousemove в javascript в сочетании с таймаутом. Если вы не перемещаете курсор, событие получения уведомлений не запускается. Когда вы перемещаете курсор и не указывается тайм-аут, возникает событие получения уведомлений и отправляется новый тайм-аут. Если истекает этот новый таймаут, событие запускается, и если курсор не был перемещен, новый таймаут не будет установлен.

Чтобы получить уведомление, используйте ajax для получения непрочитанных сообщений для таблицы сообщений.

Эта технология называется Comet. Идея состоит в том, что JavaScript делает вызов AJAX сервером. Сервер принимает соединение и ничего не возвращает, пока не найдет что-то для клиента. Представьте, что если я хочу получать мгновенные уведомления, мой браузер вызывает вызов AJAX на сервер, сервер ищет новое уведомление в базе данных. Если они есть, это немедленно возвращает их, если не просто спит, например, 0,5 секунды, а затем снова запрашивать базу данных, пока не найдет там что-то новое.

Вот пример кода создания Comet:

<? if(!isset($_POST['notificationLastId'])){ exit; } // Query database every 0.5 seconds $interval = 0.5; // Hold maximum 30 seconds $timeout = 30; // You need to close session if it open otherwise all other queries within // same session will hang, because of session locking session_write_close(); $startTime = time(); $response = array(); while (true){ // Query database to see if there are any new // notifications with id greater then $_POST['notificationLastId'] if(count($newNotifications) or time()-$startTime > $timeout){ $response['newNotifications'] = $newNotifications; // get last id of notifications table $response['lastId'] = $notificationLastId header('Content-type: application/json'); echo json_encode($response); } // Sleep not to cosume too much server resources usleep($interval*1000000); } exit; ?> 

вы можете использовать AJAX для определенной части таблицы для регулярной проверки новых обновлений. но это будет потреблять максимальные ресурсы сервера, поэтому для этого решения необходимо использовать другой сервер и выполнить задание cron с AJAX для регулярных обновлений.

Если вы говорите, так же, как в чате, было бы лучше пойти с APE, поскольку это соответствует вашим требованиям.