В общем задача такая: на странице есть блок <div> в котором выводится число всех полученных сообщений из таблицы messages для конкретного пользователя. Код (Text): $result = $mysqli->query("SELECT COUNT(*) FROM messages WHERE user_get='$my_id'"); $row = $result->fetch_row(); $totalm = $row[0]; // количество сообщений $result->close(); Сама таблица: id | user_send | user_get | text | time Мне нужно чтобы при поступлении нового сообщения для данного пользователя в базу, этот блок обновлялся, т.е. показывал новое число сообщений. Для этого я как понимаю используют long-polling, потому как просто обновлять данный блок через заданный интервал времени затратно по ресурсам при большом количестве пользователей. В интернете не нашел подходящих примеров, а сам лично не очень знаком с данной технологией. Буду очень благодарен если кто нибудь покажет на примере как это реализовать.
Если кратко, то надо просто не отвечать на запрос клиента до тех пор, пока не появится, что ответить. А когда ответили, клиент должен принять ответ и снова отослать запрос. Если подробнее, то вот http://habrahabr.ru/post/128535/ 2011 год, правда, но суть не сильно изменилась с тех времен.
А это самый крутой вопрос ever. Коммент с той же статьи: ИМХО, лучше аяксик раз в 5-10 секунд на сервер закидывать. Чай не мессенджер разрабатывается. Это создает нагрузку в среднем гораздо меньшую, чем сам пользователь.
Long polling количество новых сообщений клиент Код (Text): var id = '<?=$MY_ID;?>'; (function getmess(){ $.ajax({ url:"notif.php", data:{"id":id}, type:"POST", success: function(result){ $("#count").html(result); }, dataType: "json", complete: getmess, timeout: 10000}); })(); сервер: Код (Text): $mysqli = new mysqli('localhost', 'root', '', 'lc'); if (mysqli_connect_errno()) { printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error()); exit; } $MY_ID = $_POST['id']; while (true) { $result = $mysqli->query("SELECT COUNT(*) FROM messages WHERE user_get='$MY_ID' AND status='1' "); if (mysqli_num_rows($result)) { while ($row = mysqli_fetch_array($result)) { echo $row[0]; } exit; } sleep(10); } Проблема в том, что соединение не остается открытым например 10 секунд, как того предполагает Long-polling, вместо этого запросы отсылаются каждую секунду. Я уже все перепробовал - не могу победить эту проблему.