Javascript.RU

Comet

Comet

Пожалуйста не оценивайте статью, я её пишу для себя.
Просто мне очень нравится как сделаны блоги на этом сайте.
Очень удобно.

Для чего нужен comet.

Для:
1 - чатов.
2 - web 2.0-3.0 проектов, для проверки изменения информации.
3 - Web-почта. Пришло письмо, нам сообщили об этом.
И другое..

Виды comet

1 - Polling
Это частые ajax запросы
Лучше не использовать, т.к. надо много трафика.

2 - Long polling

Это ajax(и не только) запросы. Отличие от polling в том, что
сервер не закрывает соединение, и браузер ждет ответа.
Соединение закрывается по истечении определенного времени.
Например у php этот показатель равен 30 секунд.
Можно увеличить с помощью функции

ini_set("max_execution_time", "10000");

.
Также в клиентской части надо увеличить максимально возможное время ожидания.

Но держать соединение больше 110 секунд не получалось.
Как только приходят данные или соединение обрывается делается новый запрос.

3 - Есть другие варианты.

Comet php+ExtJS

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);
   }
});

Пример comet.

Пример кросс доменных запросов 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 секунд'})";
?>
-1

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 01:17
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 12:54
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
2 + 1 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
mycoding
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum