Я хочу создать чат, основанный на JavaScript (jQuery будет использоваться для AJAX) и PHP.
Я слышал, что хороший способ сделать это – использовать длительный опрос.
Я понимаю эту идею, но я не знаю, как ее реализовать на стороне сервера.
Бесконечный цикл звучит как плохая идея.
Вы не хотите создавать бесконечный цикл, но вы можете установить тайм-аут. В основном цикл для X секунд ждет каких-то данных, и если этого не произойдет, отправьте ответ клиенту, в котором сообщается, что ему нужно инициировать новый запрос, который будет иметь тот же период таймаута.
$source; // some data source - db, etc $data = null; // our return data $timeout = 30; // timeout in seconds $now = time(); // start time // loop for $timeout seconds from $now until we get $data while((time() - $now) < $timeout) { // fetch $data $data = $source->getData(); // if we got $data, break the loop if (!empty($data)) break; // wait 1 sec to check for new $data usleep(10000); } // if there is no $data, tell the client to re-request (arbitrary status message) if (empty($data)) $data = array('status'=>'no-data'); // send $data response to client echo json_encode($data);
реализация такого типа чата не является хорошей идеей в php, вы можете использовать CometChat , Nodjs, и если вы не можете устанавливать скрипты на свой сервер, чем использовать доступные API для отправки в реальном времени данных,
таких как Pubnub , Pushemr , Beaconpush .