Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Периодичное получение данных 
:(
    Опции темы
Gold Dragon
Дата 12.5.2010, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Суть проблемы следующая.. В базе формируются постоянно данные. Мне необходимо с определённой периодичностью получать эту информацию на странице. Это что-то автоматического обновление страницы каждые 3 секунды.

Как это можно реализовать с минимальной нагрузкой?

результатом будет вывод цифр в столбик




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Guedda
Дата 12.5.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



C минимальной нагрузкой копай в сторону cron


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 12.5.2010, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



cron это наверное не совсем то.. Я должен открыть определённую страницу с браузере




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Guedda
Дата 12.5.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



Ну тогда методами AJAX думаю будет самое оптимальное (с некоторой периодичностью собирать данные и обрабатывать их) - допустим, как это делает твиттер (когда появляются новые твиты).


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Gold Dragon
Дата 12.5.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



да, это наверное самое оптимально.. К сожалению я только-только взялся за Аякс... :( может у кого примерчик есть или ссылка на пример?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
NewDima
Дата 12.5.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



setTimeout + jQuery.getJson
С сервера передаете некоторую метку последней переданной информации, например id последней переданной записи. А на клиенте запрашиваете все данные после этой записи, ну и соответственно обновляете информацию
PM ICQ   Вверх
Gold Dragon
Дата 12.5.2010, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



большое спасибо! сейчас попробую


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
MoLeX
Дата 12.5.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



как то так:

Код

<?php
   if( isset($_SERVER['HTTP_X_REQUESTED_WITH']) )
      die("<br />time: ".time());
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Test AJAX</title>
<meta http-equiv="Content-Language" content="ru" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
function MyFunc()
{
   $.get("http://<?=$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];?>", {ajax: "true"}, function(data)
   {
      $("#MyDIV").append(data);
   });
   
   window.setTimeout(MyFunc, 3000);   
}

window.setTimeout(MyFunc, 3000);
</script>
</head>
<body>

<div id="MyDIV">Info</div>

</body>
</html>



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



вот что у меня получилось

дамп
Код

CREATE TABLE `ajax` (
  `id` int(11) NOT NULL auto_increment,
  `num` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=18 ;


INSERT INTO `ajax` VALUES (1, 2);
INSERT INTO `ajax` VALUES (2, 2);
INSERT INTO `ajax` VALUES (3, 2);
INSERT INTO `ajax` VALUES (4, 1);
INSERT INTO `ajax` VALUES (5, 1);
INSERT INTO `ajax` VALUES (6, 2);
INSERT INTO `ajax` VALUES (7, 3);
INSERT INTO `ajax` VALUES (17, 8);
INSERT INTO `ajax` VALUES (16, 2);


sms.php
Код

<?php

mysql_connect('localhost','root','');
mysql_select_db('fipuche');

$result = mysql_query("SELECT * FROM ajax");
while ($row = mysql_fetch_object($result)) {
    echo $row->num."<br />";
}
?>


index.html
Код

<html>
<head>
<title></title>
<script type="text/javascript" src="jquery-1.2.6.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
    setInterval(function(){
        $("#qqq").load("sms.php");
    }, 3000);
});

</script>
--------------------
<div id="qqq"></div>
--------------------
</body>
</html>

что лишнее, а что можно подправить? Хотя эту тему в другой раздел я думаю нужно перенести..

MoLeX,  что-то не совсем понял твой код


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
MoLeX
Дата 13.5.2010, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Gold Dragon, да тоже самое что у тебя, реализация только через get сделана

Добавлено через 45 секунд
+ у меня не затирается информация, а добавляется


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



а в чём разница? что лучше или хуже?

Добавлено через 6 минут и 55 секунд
ну про добавление я знаю.. я просто у себя это не сделал, так как пока не понял как мне передавать последний ID чтобы запрашивать из базы не всё, а только последнее.. Вот тогда и понадобится добавление.

кто знает как это реализовать?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
NewDima
Дата 13.5.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Проще всего как-то так:

В конце вывода кода
Код

<script>
var lastId = <?php echo $row->id; ?>;
</script>

+ использовать append как у MoLeX. Только скрипту с запросом передавать lastId. А в ответе sms.php
Код

<script>
lastId = <?php echo $row->id;?>;
</script>

Ну и в sms.php делать запрос всех записей с id больше переданной

Добавлено через 1 минуту и 59 секунд
только если СУБД умеет использовать id, которые пропущены в результате удаления, этот способ не будет работать конкретно, придется работать с временной меткой, например
PM ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



NewDima, что-то я запутался.. ты можешь мой код подправить?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
MoLeX
Дата 13.5.2010, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



sms.php
Код

<?php
mysql_connect('localhost','root','');
mysql_select_db('fipuche');
$result = mysql_query("SELECT * FROM `ajax` WHERE `id` > ".$_GET['id']);
while ($row = mysql_fetch_object($result)) {
    echo $row->num."<br />";
}
?>



Код

<?php
$id = 2; // последний иди в БД на данный момент
?>

<html>
<head>
<title></title>
<script type="text/javascript" src="jquery-1.2.6.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
    setInterval(function(){
   $.get("sms.php", {id: "<?=$id;?>"}, function(data)
   {
      $("#qqq").append(data);
   });
    }, 3000);
});
</script>
--------------------
<div id="qqq"></div>
--------------------
</body>
</html>


Добавлено @ 12:06
как то так, код не проверял

Это сообщение отредактировал(а) MoLeX - 13.5.2010, 12:11


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
NewDima
Дата 13.5.2010, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



MoLeX, не, так не покатит, значение передаваемого id придется обновлять после каждого запроса. Проще сделать это будет, как я написал

Я поправил код Molex

sms.php
Код

<?php
mysql_connect('localhost','root','');
mysql_select_db('fipuche');
$result = mysql_query("SELECT * FROM `ajax` WHERE `id` > ".$_GET['id']);
while ($row = mysql_fetch_object($result)) {
    echo $row->num."<br />";
}
?>
<script>
lastid = <?php echo $row->id; ?>;
</script>



Код

<html>
<head>
<title></title>
<script type="text/javascript" src="jquery-1.2.6.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
   var lastId = <?php echo $row->id; ?>
    setInterval(function(){
   $.get("sms.php", {'id': lastId}, function(data)
   {
      $("#qqq").append(data);
   });
    }, 3000);
});
</script>
--------------------
<div id="qqq"></div>
--------------------
</body>
</html>


Это сообщение отредактировал(а) NewDima - 13.5.2010, 12:40
PM ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



пока не проверил код, поясните чем $.get лучше $.load?

Добавлено через 2 минуты и 38 секунд
или может вообще POST... ?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
MoLeX
Дата 13.5.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



NewDima,
Код

<?php
mysql_connect('localhost','root','');
mysql_select_db('fipuche');
$result = mysql_query("SELECT * FROM `ajax` WHERE `id` > ".$_GET['id']);
while ($row = mysql_fetch_object($result)) {
    echo $row->num."<br />";
}
?>
<script>
lastid = <?php echo $row->id; ?>;
</script>


а разве так можно???


переписал:
sms.php
Код

<?php
mysql_connect('localhost','root','');
mysql_select_db('fipuche');
$result = mysql_query("SELECT * FROM `ajax` WHERE `id` > ".$_GET['id']);
if( mysql_num_rows($result) > 0 )
{
   $txt = '';
   while( $row = mysql_fetch_object($result) ) 
   {
      $txt .= $row->num.'<br />';
      $id = $row->id;
   }
   
   echo '{ "num": "'.$txt.'", "id": "'.$id.'" }';
}
else
{
   echo '{ "id": "'.$_GET['id'].'" }';
}
?>


Код

<html>
<head>
<title></title>
<script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()
{
   var id_start = 1;
   
   setInterval(function()
   {
      $.ajax(
      {
         type: "GET",
         url: "sms.php?id=" + id_start,
         dataType: "json",
         success: function(data)
         {
            if( data.num != undefined )
            {
               $("#qqq").append(data.num);
            }
            
            id_start = data.id; 
         }
      });
      
   }, 3000);
});
</script>
</head>
<body>
--------------------
<div id="qqq"></div>
--------------------
</body>
</html>


Добавлено через 41 секунду
P.S. sms.php надо переделать малость, а именно определение последнего id


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
NewDima
Дата 13.5.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Если не смотреть на то, что у меня нет проверки на валидность $row, то можно, код выполнится на клиенте когда будет добавлен с jquery
PM ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Gold Dragon @  13.5.2010,  13:45 Найти цитируемый пост)
пока не проверил код, поясните чем $.get лучше $.load?

или может вообще POST... ? 
smile


Цитата(MoLeX @  13.5.2010,  13:52 Найти цитируемый пост)
P.S. sms.php надо переделать малость, а именно определение последнего id 

ну так max(id) просто добавить в запрос


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
NewDima
Дата 13.5.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Зачем? Вы же и так делаете выборку всех записей. В последней и будет нужное значение. А, кстати, понял, о чем Molex сказал. Конечно, значение по-любому будет не валидно в $row после последнего вызова mysql_fetch_object, но это легко исправить
PM ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(NewDima @  13.5.2010,  14:10 Найти цитируемый пост)
В последней и будет нужное значение. 
Смотря какая сортировка будет smile ведь данные не только на этой странице используются..

Цитата(NewDima @  13.5.2010,  14:10 Найти цитируемый пост)
А, кстати, понял, о чем Molex сказал.
а я не понял :(



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
NewDima
Дата 13.5.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



Gold Dragon, зато max id  не всегда самая последняя запись. В таком случае, думаю у вас по-любому у новостей, или что там, будет временная метка добавления, вот от нее и отталкивайтесь =)
PM ICQ   Вверх
Gold Dragon
Дата 13.5.2010, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(NewDima @  13.5.2010,  14:16 Найти цитируемый пост)
Gold Dragon, зато max id  не всегда самая последняя запись
 сортировка по разным параметрам в базе будет постоянно.. а вот изменение AUTO_INCREMENT я что-то и не знаю когда используется.. Да же если и так, то это очень и очень редко и то при администрировании базы smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 17.5.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Немного усложнённый вопрос... А можно ли как-то получать этот набор, но без тэгов, т.е. чистые данные на чистом листе?




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.