Привет друзья, программисты!
Давно пилю для себя всякие мобильные приложения на phonegap. Делаю серверную часть на php, клиентскую часть на jquery+js+html. Есть скрипт на php которые подключается к бд и ищет оттуда новые данные, отдает их клиентскому скрипту в json формате.
<?php header('Access-Control-Allow-Origin: *'); // Разрешение на кроссдоменные запросы ?>
<?php
include_once "db_connect.php";
$select_row = " SELECT * FROM orders WHERE order_close = '0' AND order_owner = 'all' ORDER BY id DESC ";
$result = mysqli_query($mysqli, $select_row);
foreach ($result as $row) {
$arrayOrders = array(
'id' => $row[id],
'client_tel' => $row[client_tel],
'type' => $row[type],
'order_place' => $row[order_place],
'order_cost'=>$row[order_cost]
);
$arrayOrdersjson[]=$arrayOrders;
}
echo json_encode($arrayOrdersjson);
mysqli_close($mysqli);
?>
На клиентской стороне, скрипт каждые 10 секунд по таймуту делает запрос на сервер.
Но, каково было мое удивление, когда я увидел другой скрипт который создает "постоянное" соединение к этому самому php скрипту.
<?
// number of second the script allowed to run. setting to 6 minutes
$limit = 360;
$time = time();
// getting last loaded value
$last_id = (int)$_GET['id'];
// just to be sure that script will be killed
set_time_limit($limit+5);
mysql_connect('localhost','user','password');
mysql_select_db('database');
function escape($str) {
return str_replace('"','\"',$str);
}
// цикл, проверяющий новые сообщения каждые 5 секунд
while (time()-$time<$limit) {
// checking if something new was added to my test table
$res = mysql_query('SELECT * FROM `comet` WHERE `id`>"'.$last_id.'" ORDER BY `id` ASC');
if (mysql_num_rows($res)) {
while ($item=mysql_fetch_array($res)) {
// пишем js-скрипт, который выполнится у клиента
echo 'self.putMessage("'.$item['id'].'","'.escape($item['name']).'","'.escape($item['text']).'");';
}
// выбрасываем все данные и выходим, чтобы клиент смог их обработать
flush();
exit;
}
// если данных нет - ждём 5 секунд
sleep(5);
}
mysql_close();
?>
А теперь вопрос:
Насколько каждый из способов правильный, и как лучше?