Comet
Comet
Пожалуйста не оценивайте статью, я её пишу для себя.
Просто мне очень нравится как сделаны блоги на этом сайте.
Очень удобно.
Для:
1 - чатов.
2 - web 2.0-3.0 проектов, для проверки изменения информации.
3 - Web-почта. Пришло письмо, нам сообщили об этом.
И другое..
1 - Polling
Это частые ajax запросы
Лучше не использовать, т.к. надо много трафика.
2 - Long polling
Это ajax(и не только) запросы. Отличие от polling в том, что
сервер не закрывает соединение, и браузер ждет ответа.
Соединение закрывается по истечении определенного времени.
Например у php этот показатель равен 30 секунд.
Можно увеличить с помощью функции
ini_set("max_execution_time", "10000");
.
Также в клиентской части надо увеличить максимально возможное время ожидания.
Но держать соединение больше 110 секунд не получалось.
Как только приходят данные или соединение обрывается делается новый запрос.
3 - Есть другие варианты.
PHP код
<?
ini_set("max_execution_time", "10000");
sleep(10);
echo "{success:true,text:'Привет'}";
?>
ExtJS код
Ext.Ajax.request({
url: 'work/comet/1.php',
timeout:300000,
success: function(response, opts) {
var obj = Ext.decode(response.responseText);
console.dir(obj);
},
failure: function(response, opts) {
console.log('Ответ сервера ' + response.status);
}
});
Пример кросс доменных запросов ExtJS+PHP с задержкой в ответе от 3 до 10 секунд.
Можно поставить большую задежку
http://vreshenie.ru/work/comet/cross-domain/cross-domain-comet.html
Код
index.html
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://vreshenie.ru/ext/resources/css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="http://vreshenie.ru/ext/resources/css/xtheme-gray.css" />
<script type="text/javascript" src="http://vreshenie.ru/ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="http://vreshenie.ru/ext/ext-all-zip.php"></script>
<script src="http://vreshenie.ru/work/comet/cross-domain/extjs-cross-domain.js"></script>
<script>
Ext.onReady(function(){
function crossDomainRequest(){
Ext.Ajax.request({
timeout:300000,
url: 'http://moc-081.ru/work/comet/2.php',
scriptTag: true,
success: function(r) {
var message = r.responseObject.text;
console.log(message);
Ext.getCmp('serverMessage').update(message);
crossDomainRequest();
}
});
}
new Ext.Window({
title:'Кросс доменный comet',
width:250,
height:150,
layout:'fit',
items:[{
id:'serverMessage',
autoScroll:true,
html:'Это место для ответов сервера.<br>Пожалуйста подождите от 3 до 10 секунд.'
}],
listeners :{
show:function(){
crossDomainRequest();
}
}
}).show();
});
</script>
</head>
<body>
</body>
</html>
2.php
<?php
ini_set("max_execution_time", "10000");
$time_to_sleep = rand(3, 10);
sleep($time_to_sleep);
$callback = $_GET['callback'];
echo "$callback({'status':'success','text':'Привет от сервера.<br> Сервер не давал ответ $time_to_sleep секунд'})";
?>
|
Roksa imielin
Abigale roksa
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.