X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Комета
Alcorn
Alcorn
Topic Starter сообщение 21.2.2010, 8:02; Ответить: Alcorn
Сообщение #1


Кто-нибудь пользовался кометой (Comet - получение данных в реальном времени)?
http://www.developers.org.ua/archives/max/...ttp-no-ne-ajax/
http://sontan.name/blog/view/~real-time-web-and-comet
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 21.2.2010, 11:14; Ответить: Letmetouchyou
Сообщение #2


вот только я не понял. Ета технология long polling (длинных запросов) ни чем не отличаеться от обыных асинхроонных запросов? только "не моментальным" ответом от сервреа?

значит вся соль тут заключаеться в серверной части, там нужно , например , перебирать базу данных , и когда появитсься что то нужное - выдать клиенту?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Alcorn
Alcorn
Topic Starter сообщение 21.2.2010, 13:14; Ответить: Alcorn
Сообщение #3


Ага. Смысл в постоянной поддержке открытого соединения и как на сервере появляется что-то новое - выдаём клиенту.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 21.2.2010, 13:28; Ответить: Letmetouchyou
Сообщение #4


примеров никаких не нашол )
решил попробовать сам.
вот что получилось:

смысл такой. в начале на странице берем полсений айди в таблице в БД. ЕГо значение записываем в переменную яваскрипта.
есть кнопка - ассинхронный запрос на добавлени новой записи в таблицу. При завершении запроса - в переменную , которая хранит значние полседней записи в таблице, записываем новое значение. ето происходит на стороне клиента. (тут ваиантов миллион как ето делать, напрмиер сесси, куки, а еше лутше ето все проверять в обработчиках и нечиго не передавать).

при загрузке дом, вызываем функцию "long polling''. то есть - делаетсья ассинхронный запрос к пхп оброабочику, передаеться полсдний айди в таблице. В самом обработчике циклом проверяем теот переданный айди, с полсденим в таблице. (do while) то есть цикл будет работать пока в базу не добавиться запись. И только когда запись добавиться - етот запрос завершиться, и сработает callback зароса, в котором "говорим" что добавлени запись, и опять делаем вызов "long polling" функции, и получим ответ только поле нового добавления в Бд.

index.php

<?php
require_once
'connect_config.php'; //соединение с бд


#####получние послжениего id в таблице
$request = mysql_query("select id from poll order by id desc limit 1");
if ($request){
if (mysql_num_rows($request) > 0 ) {
$request = mysql_fetch_array($request);
$last_id=$request['id'];
}
}
#####
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
var last_id = <?php echo $last_id;?>; //lasyt_id - глобальная перемнная, хранит полсджений айди в базе.

function complete(obj) {
alert(obj.name);
start(); //вызов loong request
};

function getlastid(obj){ //callback функция, послде добавления записи в БД.
if(obj.error==false){
last_id=obj.last; //новое значение последнего айди в базе
} else alert('ERROR');
}

function start() {
$.getJSON('ok.php', {last_id : last_id}, complete); // функция long request, в обработчик передается перменная с послденим айди.
};

$(document).ready(function(){
start(); //вызов loong request
$('#add').click(function(){
$.getJSON('add.php', getlastid); //ассинхронный запрос надобаваление в записи в БД.
});

});
</script>
</head>
<body>
<span class="last_name"></span>
<button id="add">add_data</button>
</body>
</html>


add.php - добавние в бд
[PHP]
<?php
//обработчки добавлния в бд

$error=false;
require_once 'connect_config.php';
$request = mysql_query("INSERT INTO poll (name) VALUES ('".rand(10,1000)."')"); //в поле нейм добавляем рандомное число
($request==true)?$last_id=mysql_insert_id():$error=true;
header('Content-Type: text/javascript; charset=windows-1251');
?>
{
last: '<?php echo $last_id;?>',
error: '<?php echo $error;?>'
}
[/PHP]

ok.php - Обработчик long polling

[PHP]<?php
//обработчик проверки записей

$last_id_page = $_REQUEST['last_id']; //получаем последний адйи
$last_id=1;

require_once 'connect_config.php';
//цикл: берем послжений айди в БД, и сравнием с переданным, тоесть работает пока не появитсья в бд новая запсиь
do {
$request = mysql_query("select id from poll order by id desc limit 1");
if ($request){
if (mysql_num_rows($request) > 0 ) {
$request = mysql_fetch_array($request);
$last_id=$request['id'];
}
}
usleep(1000000);
} while ($last_id == $last_id_page);
//////////////////////////////

//берем поле нейм по новой добавлений записи
$request = mysql_query("select name from poll where id='".$last_id."' limit 1");
if ($request){
if (mysql_num_rows($request) > 0 ) {
$request = mysql_fetch_array($request);
$last_name=$request['name'];
}
}
header('Content-Type: text/javascript; charset=windows-1251');
?>
{
name: '<?php echo $last_name;?>'
}[/PHP]

вот сам пример

ето все можно реализовать на много проше, но для меня было главное чтобы просто заработало, а не оптимизация скрипта.

ето самый просто пример, от которого можно оттлакиваться )

п.с. если старница долго открта - скрипты могут "ломаться" - но мне пока не интересно почему так :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Alcorn
Alcorn
Topic Starter сообщение 21.2.2010, 14:11; Ответить: Alcorn
Сообщение #5


Примеров тоже не находил.
ето самый просто пример, от которого можно оттлакиваться

Пример работает, посмотрел.

Думаю может прикрутить куда-нибудь данную штуковину, но не знаю о проблемах, с которыми придётся встретиться.

В описании на англ. встречал про необходимость каких-то 256 байт перед сообщением, толи в IE, толи в Safari.

Плюс есть XHR long polling и XHR streaming. Первый вроде с закрытием соединения, второй - без. Comet Iframe и кроссдоменный js пока не нужен.

Вобщем наверное разбираться с возможными ошибками и кроссбраузерностью нужно на живых примерах.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 29.3.2024, 18:11
Дизайн