[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Описание Comet-технологий
Страницы: 1, 2, 3
caballero
не могут выполнятся параллельно без процессов или тредов
физически никак
killer8080
vital
тема нужная, ждём продолжения smile.gif
Guest
ахринеть, прочту наверно это тоже, а то я регулярно пишу системы мгновенных обновлений, делаю обычно на соектах один записывает внего другой выкачивает из него
Invis1ble

 ! 

М
nemo atom
прекрати писать всякую хрень
Invis1ble
Stasonix
да, хорошо получилось, а вот меня всегда мучал и до сих пор мучает вопрос реализации выхода пользователя из чата, мне кажется:

// Bind event to Before user leaves page with function parameter e
$(window).on('beforeunload', function(e) {


такой вариант в нормальных чатах не используют. В общем так я и не понял как это т.с. "профессионально органзивать", не используя дополнительное серверное ПО (напр. CRON).

Извините что здесь написал, но согласитесь, оно не далеко от этих comet-технологий ходит. А вообще мечта чтобы такую реализую показали как эту тему ( т.е. отдельной ).
tomash
для тех кто юзает nginx - HTTP_Push_Module

_____________
Чтобы понять, что такое рекурсия - нужно понять, что такое рекурсия.
RCuPeR
У меня на phpFox-е реализована примерно та же схема.
Но есть несколько серьезных проблем которые никак не удается решить:
Все зависает!
Система сама по себе работает хорошо, держит коннект и случае успеха возвращает результат, доказательство тому этот скрин http://screencloud.net/v/uOKt
Вверху comet.php который держал соединение до тех пор, пока от сервера не пришел успешный результат, далее он переконектился (comet.php внизу).
Тут все отлично, НО!
Страница реально зависает. Нельзя выполнить никакой другой ajax-запрос. Нельзя оборвать текущее соединение. Нельзя даже перезагрузить страницу. Нельзя открыть новую вкладку по тому же адресу ("Ожидание от сервера..." бесконечно).

После нажатия на F5, текущее соединение обрывается и создается новое которое длится бесконечно долго.
http://screencloud.net/v/dW0Y

Что с этим делать непонятно...

Листинг:
comet.js
Свернутый текст
  function Messanger() {
this.last = 0;
this.timeout = 360;
this.comet = 0;
var self = this;
// this.putMessage = function(id, data) {
// // callback, добавляет сообщения на страницу, вызывается из полученных с сервера данных
// //self.last = id;
// console.log(data)
// }

this.parseData = function(message) {
// простая обработка данных полученных с сервера, разбиваем строки и выполняет функции
var items = message.split(';');

if (items.length<=1) return false;
for (var i=0;i<items.length;i++) {
items[i];
}
setTimeout(self.connection, 1000);
}
this.connection = function() {
// здесь открывается соединение с сервером
var sParams = '&phpfox[ajax]=true&phpfox[call]=';

for(var sKey in oComet)
{

sParams += sKey + ((self.last != 0) ? '&comet_item=' + self.last : (isset(oComet[sKey]) ? '&' + ltrim(oComet[sKey], '&') : '' ));

if (!sParams.match(/phpfox\[security_token\]/i))
{
sParams += '&phpfox[security_token]=' + oCore['log.security_token'];
}

sParams += '&phpfox[is_admincp]=' + (oCore['core.is_admincp'] ? '1' : '0');
console.log('Connection Establishment:' + sParams);
self.comet = $.ajax({
type: "POST",
asynch: true,
url: getParam('sJsComet'),
data: sParams,
cache: false,
timeout: self.timeout * 1000,
success: self.parseData,
error: function()
{
console.log('Empty data');
setTimeout(self.connection, 1000);
}
}
);

sParams = '';
}
}

this.init = function() {
//setInterval(self.connection(), self.timeout*1000);
self.connection();
}

this.kill = function()
{
self.connection = false;
}

this.init();
}


метод refreshMail() который выводит новый контент:
Свернутый текст

public function refreshMessage()
{
//echo 'console.log(\'Mail_Component_Ajax_Ajax\');';
$iCometItem = $this->get('comet_item');
$iCometLimit = 360;
$iCometTime = time();

set_time_limit($iCometLimit + 5);

$oMail = Phpfox::getService('mail');

while ( time() - $iCometTime < $iCometLimit)
{
if($oMail->getNextComet($this->get('comet_item')))
{
$this->template()->assign(array(
'aMail' => $oMail->getMail($oMail->getLastMail())
)
)->
getTemplate('mail.block.entry');
echo '$(\'#js_append\').prepend( \' ' . $this->getContent(true) . ' \');';
echo 'msg.last = ' . $oMail->getLastMail() . ';';
flush();
exit;
}
sleep(5);
}
}


ПЫСЫ: Остановить это безобразие можно только в том случае, если comet узнает, что на сервере появилась новая информация, отобразит ее и тогда я могу перечитать страницу или выполнить асинхронный аякс-запрос.

_____________
Гнусный социопат с комплексом Бога.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.