BarnyBroken
@BarnyBroken
Дизайнер, веб-разработчик.

Как реализовать PHP + MYSQL + JAVASCRIPT long polling?

Всем привет. Столкнулся с направлением с которым раньше работать не приходилось. Хотел бы разобраться в длинных опросах.

Пишу небольшой чат php + mysql + javascript. На данный момент тестово поставил короткие запросы чтобы получать сообщения. Но сам факт того что запрос отправляется каждые две секунды на сервер сейчас меня вообще не устраивает.

Облазил кучу форумов, начитался кучу документаций, но почти все они связаны с тем, как реализовать данный метод не при помощи php + mysql, а при помощи считывания файликов txt.

Подскажите пожалуйста, как реализвать данный метод при помощи php + mysql ?

Библиотеки, такие как socket.io, комет серверы, не предлагайте. Не вижу смысла их использовать, если можно все сделать в чистом виде без лишних библиотек. Тем более что javascript и php это сделать позволяют.

Для примера, то что у меня есть.

Таблица сообщений построена так:
CREATE TABLE IF NOT EXISTS `messages_elements` (
  `id` smallint (5) unsigned NOT NULL auto_increment,
  `user` SMALLINT(5) NOT NULL,
  `text` TEXT NOT NULL,
  `date` TIMESTAMP default CURRENT_TIMESTAMP NOT NULL,
  PRIMARY KEY  (`id`),
  KEY (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Отправляю я сообщения при помощи xhr со стороны javascript, и при помощи insert со стороны mysql.
После, получаю сами сообщения с базы массивом и разбиваю его при помощи while, пример:

$database = "SELECT * FROM messages_elements ORDER BY `date` ASC";
$query = $this->DB->query($database);

 while ($message = $this->DB->fetch_array($query)){
    $data = array(
        'id' => $message['id'],
        'user' => $message['user'],
        'text' => $message['text'],
        'date' => $message['date']
    );
}

Ну и под конец загоняю все в JSON формат и через xhr вывожу его в блок с помощью innerHTML. Подскажите пожалуйста, как при моем методе можно реализовать длинный запрос ? Буду очень сильно благодарен.
  • Вопрос задан
  • 893 просмотра
Пригласить эксперта
Ответы на вопрос 2
Исторически сложилось, что long polling и websocket не дружат с php. Печалька в том что php никогда не был сам себе веб сервером, и потому управлять подключением не умеет хорошо. Обычно между клиентом и php есть какая-то прослойка - nginx/apache/итд
Варианты конечно есть. Есть нативный dev-web server в php. Есть реализации типа php-pm. Но как веб сервер - любая из них уступает nginx/apache.
Натягивать long polling на apache+mod_php/nginx+php-fpm я бы вообще запретил. Это требует больше ресурсов чем запросы каждые 2 секунды.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы