[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выход из цикла while через определённое время
web-monster
Привет! Делаю чат основанный на протоколе xmpp, отправляет всё успешно, а вот с принятием проблема.
На приём стоит такое условие:

set_time_limit(0);
$conn = new XMPPHP_XMPP('xmpp.ru', 5222, 'логин@xmpp.ru', 'пароль', 'xmphp', 'xmpp.ru', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO);

$conn->connect(); // подключаемся
$conn->autoSubscribe();

while(!$conn->isDisconnected()) { // Зацикливаем соединение

$payloads = $conn->processUntil(array('message','end_stream', 'session_start'));
// Тут уже принимаем сообщение рвём соединение и js открывает его заново.
$conn->disconnect();

}
}


echo json_encode($сообщение);

Только вот если нет сообщений цикл будет висеть хоть час, а это не правильно. Нужно как-то каждые 25 секунд его прерывать, подскажите как! Или может логику другую.



Спустя 50 минут, 42 секунды (21.09.2011 - 10:47) caballero написал(а):
там же есть функция типа delay или sleep
ставишь секунду и счетчик на 25
типа того

Спустя 2 минуты, 8 секунд (21.09.2011 - 10:50) web-monster написал(а):
ставил
sleep(20);
$conn->disconnect();

Так отказывается сообщение принимать.
Пробовал перед циклом объявить время $timer = time();

А в цикле проверку:

	while(!$conn->isDisconnected()) {

$now = time();
if (($now - $times) > 25) {
$conn->disconnect();
$timer = time();
}

Тоже не работает.

Спустя 10 минут, 45 секунд (21.09.2011 - 11:00) vital написал(а):
Что-то я не вижу break в цикле ни в каком из вариантов, что бы цикл прерывался.

Спустя 1 час, 11 минут, 57 секунд (21.09.2011 - 12:12) XCross написал(а):
$conn->disconnect();



условие цикла глянь... сразу увидишь...

Спустя 6 минут, 19 секунд (21.09.2011 - 12:19) web-monster написал(а):
$conn->disconnect(); // в нём делаем break; и другие действия

Спустя 47 секунд (21.09.2011 - 12:19) vital написал(а):
А да.
Я не понимаю, зачем вам на сервере делать задержку? Плохо это.
Джсом каждые 25сек опрашивайте серер на наличие новых данных и все.
setTimeOut() вам в помощь.


Спустя 25 минут, 10 секунд (21.09.2011 - 12:45) web-monster написал(а):
Там идёт цикл while(), пока он зациклен сообщения приходят, когда нет соответственно не приходят.
Делал я jquery каждые 25 секунд, но при повторном запросе он не выходит из цикла, а создаёт ещё один. То есть получается груда висящих циклов.

Спустя 1 минута, 54 секунды (21.09.2011 - 12:46) vital написал(а):

Спустя 1 час, 3 минуты, 39 секунд (21.09.2011 - 13:50) web-monster написал(а):
Это всё классно, но надо чтобы чат был через jabber. Как вариант можно проверять js если не было ответа в течении 20 секунд то отправлять запрос о реконекте. Просто думал, можно как нибудь самостоятельно через несколько секунд оборвать цикл.

Спустя 16 минут, 4 секунды (21.09.2011 - 14:06) alex12060 написал(а):

$start = microtime(true);

while(true) {
if ((float)(microtime(true) - $start) > 20)
break;
}

Спустя 33 минуты, 39 секунд (21.09.2011 - 14:40) web-monster написал(а):
неа, не прерывает(

Спустя 9 месяцев, 27 дней, 16 часов, 57 минут, 46 секунд (19.07.2012 - 07:38) vovvi написал(а):
Делаю тоже чат на основе джабера, планирую на крон повесить чтобы ра з в минуту к примеру проверял был ли ответ, спроблема в том что сообщения вообще не принимаются. автор ты решил проблему?
Быстрый ответ:

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