Модераторы: 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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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