4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
1

Непрерывное обновление сообщений в чате

15.01.2011, 18:43. Показов 5766. Ответов 29
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
думаю все из вас встречались с подобным скриптом, который я приведу чуть ниже. Он непрерывно выводит сообщения в чат, просто непрерывно читает текстовик отображая только новые строки. У меня, на винде, этот скрипт вообще не работает, винда просто зависает. На хостинге FreeBSD 4.8-STABLE, сообщения выводятся но, после того как загружается сообщение броузер как бы зависает, строки перестают выводиться. Когда обновляешь страницу, весь файл опять считывается до конца и соединение зависает.
Что можно предпринять чтобы заставить его нормально работать?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
$FileName='chat/1.txt';
set_time_limit(0); 
for ($i=0;$i<100;$i++)
echo '<!-- -->';
flush();
 
$array=file($FileName); 
$ArrayCount=count($array); 
$NewArrayCount=0; 
while(!0){ 
    if($ArrayCount!=$NewArrayCount) {
        for($i=$NewArrayCount;$i<$ArrayCount;$i++) {
            echo $array[$i]; 
            $NewArrayCount=$ArrayCount; 
            $array=file($FileName); 
            $ArrayCount=count($array); 
            flush(); 
        }
    }
}
?>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2011, 18:43
Ответы с готовыми решениями:

Вывод сообщений в чате
Ребзя привет! В общем сообщения в чате записываются в файл, хочу переписать на mysql. Добавить...

Разделение сообщений в чате на группы
Всем привет, у меня тут проблема которую я без понятия как решить. В общем для одного проекта нужен...

Порядок отображения сообщений в чате
Столкнулся с такой проблемой при разработке локального чата в С#, при передаче многих сообщений в...

Как сделать в чате посылку частных сообщений?
Как сделать в чате посылку частных сообщений. Так чтобы открывалось окошко у посылающего чатовца...

29
1 / 1 / 1
Регистрация: 21.05.2010
Сообщений: 109
15.01.2011, 19:31 2
Должен быть выход из цикла while(1). Даже flush() не поможет.
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
15.01.2011, 19:32  [ТС] 3
тоесть, объясни конкретнее
0
1 / 1 / 1
Регистрация: 21.05.2010
Сообщений: 109
15.01.2011, 19:35 4
Обновлять такое лучше JavaScript'ом, а не PHP скриптом. Скажем, раз в 5 секунд обновлять фрэйм, а скрипт должен выводить текущие строки (скажем 100) штук, а при добавлении новой строки удалять старую. Всем проще и Web-серверу и броузеру
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
15.01.2011, 20:12  [ТС] 5
я думал ты что-то конкретное предложить хочешь...
обновлять фрэйм - это пройденый этап!
0
0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 22
17.01.2011, 10:38 6
set_time_limit(0);
Хм? А что будет, если в чате 100 чел?
0
0 / 0 / 0
Регистрация: 26.02.2009
Сообщений: 22
17.01.2011, 12:37 7
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
set_time_limit(30);
 
$FileName='chat/1.txt';
$ArrayCount=0;
$changes=0;
 
while ($changes<10)
  {
  $OldArrayCount=$ArrayCount;
  $array=file($FileName);
  $ArrayCount=count($array);
 
  if ($ArrayCount>$OldArrayCount)
    {
      for($j=$OldArrayCount;$j<$ArrayCount;$j++)
        {
        echo $array[$j].'
'
        };
        $changes++;
        flush();
    };
  };
?>
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
17.01.2011, 13:45  [ТС] 8
то же самое, специально взял твою модификацию и проверил.
Текстовый файл выводится и после вывода последней строки - соединение зависает, даже не успевают загрузиться фрэймы, которые идут после фрэйма с чатом

Блин, имею огромную мечту написать чат таким образом, но что-то всё постоянно не клеится. Все остальные разделы чата уже написаны, основывался на этом примере http://bizarre.tsua.net, а вот сделать так же как там вывод контента так и не получается

Рассмотрю все предложения, думаю не только мне интересно сделать подобны stream-поток.
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
18.01.2011, 10:46 9
А если так поробовать, сыро конечно, но сама идея ...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?
set_time_limit(0);
 
ignore_user_abort(true); //нужно для того чтобы можно было потом определить онлайн юзвер или нет
$FileName='1.txt'; 
 
function getline($number) {
global $FileName;
$file = file($FileName);
if (@$file[$number]) $lines = $file[$number];
else $lines = false;
if ($lines) return $lines;
else return 'noline'
}
 
$i = 0;
while (true) {
         $line =  getline($i);
         if ($line != 'noline') {
             echo $line.'<br />';
             $i++;
             sleep(0); //интереснее, если будет sleep(1), эффект хороший
             }
         else {
             sleep(3); // ждем 3 секунды, может новые мессажы появятся
             }
         flush();
         if (connection_status()!=0){
         // тут пишем в базе, что чаттер уже ушел на покой ... и останавливаем скрипт
         die();
         }
}
?>
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
18.01.2011, 11:14 10
> set_time_limit(0);
> Хм? А что будет, если в чате 100 чел?
Ничего не будет!
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
19.01.2011, 12:31  [ТС] 11
у тебя этот пример работает, когда из другого окна записываешь строку в тестовик она выводится в броузер скриптом без обновления страницы?

скажу чесно, я ещё не попробовал, потому что у меня немного структура скрипта другая, но если ты скажешь, что у тебя это работает - я перепишу всё по примеру!

По поводу он-лайн юзверь или нет: у меня есть один фрейм, который фремя от времени обновляется, он показывает количество юзверей и кто сейчас он-лан. Так вот, этот фрейм записывает каждый раз фремя обновления страницы в timestamp формате. Потом я просто проверяю date('U')-$timestamp>30 и удаляю всех кто соответствует выражению.
Другим способом он-лан вычислить не получилось
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
19.01.2011, 12:47 12
У меня работает без проблем, проверял уже и под винду и под *никс.
Время процессора 00% )
А по поводу онлайн, я считаю лучче использовать,

if (connection_status()!=0){

Так как, эта страница выдает поток непрерывно, чел может нажать просто кнопку СТОП. Тогда что? Вывод сообщений прекратиться, а твой фрейм все равно будет постоянно обновляться пока не закроют само окно.

А еще лучче (наверное), переписать этот скрипт и вместо номеров строк использовать Unix TimeStamp ...
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
19.01.2011, 12:59  [ТС] 13
и под винду тоже? ну ты даёшь, и что работает?

ну мля вообще, сейчас буду пробовать
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
19.01.2011, 13:19  [ТС] 14
не работает!
мой пример хотя бы строки из файла до конца выводил , а потом зависал, а этот зависает сразу не выведя не одной строки
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
19.01.2011, 13:28 15
Врешь!!! )
Какая у тебя винда?
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
19.01.2011, 14:51  [ТС] 16
Win 2000,а хостинг на FreeBSD 4.8-STABLE

я не вру, если бы знал как я уже намучался с этим бесконечным циклом
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
19.01.2011, 14:52  [ТС] 17
когда запускаю на винде, всё зависает, никаких выводов в броузер, закрываю окно и потом оказывается, что файл со скриптом заблокирован на чтение и запись, приходится перезагружать винду чтобы к нему потом обратиться.
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
19.01.2011, 15:12 18
Какое у тебя мыло, я отправлю свой вариант ...
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
19.01.2011, 15:14 19
отправил, там два файла, запускаешь chat.php, потом можешь открыть 1.txt в блокноте и дописать туда что нибудь и сохранить.
Попробуй так
Если будет работать, то надо уже разбираться в твоем коде
0
3 / 3 / 6
Регистрация: 20.06.2010
Сообщений: 580
19.01.2011, 15:17 20
host mx3.masterhost.ru [217.16.16.88]: 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)

Спасибо )
0
19.01.2011, 15:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2011, 15:17
Помогаю со студенческими работами здесь

Отодвигание listView при написании сообщений в чате
Как отодвинуть listView при написании сообщений в чате? Вот мой xml &lt;?xml version=&quot;1.0&quot;...

Не отображаются ники при отправке сообщений в чате чата
В чате при отправке сообщений не отображаются ники(подскажите в чём ошибка? import java.net.*;...

Обновление списка пользователей в чате.
Скачал себе чат под ASP называеться Adrenalin's ASP Chat v1.0 работает нормально только одного я не...

Вопросительный знак вместо русских букв при отправке сообщений в TCP-чате
Помогите пожалуйста новичку сделать,чтобы можно было русскими писать.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru