:: Чат и обновление без Js ::

LomziK[IP]

Guest
Re: Re: Re: Бред сивой кобылы.

Автор оригинала: Varg
Что-то я перестал понимать. Твой второй вариант с постоянным соеденением это через вечный цикл с флушем? Или нет?
напиши код второго варианта
 

Ropez

Guest
Re: Re: Re: Бред сивой кобылы.

Автор оригинала: Varg
Что-то я перестал понимать. Твой второй вариант с постоянным соеденением это через вечный цикл с флушем? Или нет?
Есть два варианта:

Вариант 1: ПХП
ПХП скрипт входит в вечный цыкл и посылает новые сообщения по прибытию. Флушить не надо, просто повесь в начале скрипта
PHP:
ob_implicit_flush();
Плохо то что Апач будет для каждого скрипта держать отдельный процесс, а они сволочи много памяти кушают. Поетому при большом количестве юзеров такой вариант неприемлем так как просто напросто не хватит памяти. Хотя и очень простое в реализации решение.

Вариант 2: Сервер
Я предлагаю написать свой однопроцессовый веб-сервер, к которому будет конектится борузер. Сервер в свою очередь тоже будет проверять наличие новых сообщений писять их в соответствующий сокет. Ресурсов кушает минимально.:)
 

Ropez

Guest
Re: Re: Re: Re: Бред сивой кобылы.

PHP:
set_time_limit( 0 );
ob_implicit_flush();

include( 'db.php' );

$ids = 0;

for ( ; ; )
{
	sleep( 1 );
	$r = mysql_query( "select id, mess from messs where  id > $ids order by id" );
	$txt = '';
	while ( list($id,$mess) = mysql_fetch_row( $r ) )
	{
		if ( $ids < $id ) $ids = $id;
		$txt .= $mess."\n";
	}
	if ( $txt ) $txt .= "<script language=javascript>window.scrollTo(0,100000)</script>\n";
	echo $txt;
}
 

Иван Шумков

Новичок
Ropez
Какой ужас. Может так?

Код:
set_time_limit(0);
ignore_user_abort(true);

while(!Connection_Aborted()) {
  echo "\n";
  flush();
  while( ... ) {
    echo "Message...";
  }
  sleep(1);
}
 

netdog

net @
Иван Шумков ты на дату последней мессаги посмари, ага ? ;) годиками так 3-мя промазал...
 
Сверху