Непрерывный контекст в чате

Модератор: Absurd

IUnknown
Сообщения: 16
Зарегистрирован: 14 апр 2005, 17:54

Єто все конечно хорошо я сделал и работает, только можно ли сделать как-то без скритого фрейма (что-би браузер не щелкал).Sorry за язик, а то только ураинская раскладка настроена.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

IUnknown, если только под IE - смотри в сторону innerHTML и Javascriptом дописывай туда (сам не пробовал, только видел когда-то примеры).

В общем варианте это, скорее всего, невозможно, поскольку в Javascript не предусмотрено возможности дописывать в тело документа текст, после его загрузки. (Исправьте меня, если я не прав).

У меня в голове уже давно крутятся бредовые идеи, что-то типа: сделать текст в чате в виде картинок, которые будут генерироваться серверным языком (например php), а на Javascript только менять картинки (30 сообщений на экране - 30 картинок, они показываются пользователю, а тем временем php переименовывает/сдвигает картинки, первую удаляет, создаёт последнюю с новопришедшим сообщением).
Проблемы:
1. Картинки могут быть отключены
2. Кэширование
3. Так внятную форму эти идеи до сих пор и не приняли

Была бы на JS возможность так же текст менять ... так нет же ...


Но! Поскольку уж эта тема в форуме "Java", то в яве, да через апплет, - это будет совершенно иначе всё выглядеть.
IUnknown
Сообщения: 16
Зарегистрирован: 14 апр 2005, 17:54

А у меня без проблем дописывает с помощью write / writeln в конец уже существующих сообщений?! А не подскажите как лучше сделать что-бы пользователь вытягивал из базы данных только те сообщения которых у него нет (если например в базе хранится 50 последних сообщений) - может с ними вместе еще и дату обращения пользователя к серверу, для того что-бы вытягивать только те которые пришли после того времени когда он впоследний раз обращался к серверу?!
IUnknown
Сообщения: 16
Зарегистрирован: 14 апр 2005, 17:54

А может кто слышал как работают чаты у которых есть еще автономно работающий чатовой демон (написаный на Си или еще на чем-то)? Я видел такие и у них нет щелкания браузера - сообщения добавлябтся сами собой плавно. И еще может кто знает как работает chat.bigmir.net - а то мне очень уж нравится как он выводит сообщения?
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

IUnknown,
write / writeln - это на каком языке?

Если через Java это делать - то можно создать Thread, наверное (не знаю точно, какие там на applet ограничения есть), и в нём опрашивать БД.
В своём классе в переменной int lastMessageId хранишь последнее сообщение которое показано у пользователя.
Из БД выбираешь сообщения: SELECT * Where id > lastMessageId и дописываешь их в конец (таблицы, или просто графики, как уже реализуешь).

Если у тебя это document.write в Javascript работает (мне было бы интересно посмотреть хоть на саму работу этого чата) - то в Javascript можешь сохранять дату(id) последнего сообщения и при обращении к серверному скрипту (например newmessage.php) передавать эту дату: newmessage.php?last=0123456789 (last - временная метка Unix).
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

IUnknown, примерно как работает chat.bigmir.net можно посмотреть тут.
Насколько я знаком с чатами - демона он не использует ;-)

Если тебе действительно захочется писать чат с демоном:
1. Можешь найти уже готовые исходники и проанализировать их для начала.
2. Создашь новую тему, а то эта слишком длинной будет.

Но я действительно сомниваюсь, что это тебе нужно.
Хотя бы, у тебя есть доступ к cron таблице на хостинге?
Я не абсолютно уверен, но весьма подозреваю, что это может понадобиться.
IUnknown
Сообщения: 16
Зарегистрирован: 14 апр 2005, 17:54

Спасибо всем за помощь (но это не значит что мне она уже не нужна). А вот на счет write то у меня он работает так: скрытый фрейм обновляется через каждые 5 секунд и в событие OnLoad пишу something.frame("msgs").writeln("load.php"); и в фрейме с сообщениями я получаю новые сообщения которые добавляются в конец старых. А вот на счет демона, то все ок - у меня есть полный доступ к серверу.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

[quote="IUnknown"]в событии OnLoad пишу something.frame("msgs").writeln("load.php")]

Странно, мне когда-то мудрый Aik говорил, что так писать по уставу не положено :lol:

Потому будь осторожен, под отличными от IE броузерами можешь получить совершенно неожиданный результат.

Так если у тебя оно дописывает в конец - то в чём, собственно, проблема? (кстати, что значит "щёлкает" ?)
Deady
Сообщения: 193
Зарегистрирован: 17 фев 2004, 13:13
Откуда: Москва
Контактная информация:

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

Код: Выделить всё

<html>
<head>
   <title>test</title>
</head>
<body>
<script language='VBScript'>
Sub ChangeText()
   Dim r
   set r = document.body.createTextRange()
   r.findText("это текст")
   r.pasteHTML("это новый текст")
End Sub
</script>
   [align=center]
   <input type='button' value='Изменить текст' onClick='ChangeText()'>
   

   

   это текст
   [/align]
</body>
</html>

также можно использовать innerHTML:

Код: Выделить всё

<html>
<head>
   <title>test</title>
</head>
<body>
   [align=center]
   <h1 id='text' onClick='ChangeText()'>Это текст</h1>
   <div>Изменить текст</div>
   [/align]
</body>
<script language='VBScript'>
Sub ChangeText()
   text.innerHTML='Новый текст'
End Sub
</script>
</html>

надо сказать, что первый пример у меня сработад только в IE, второй вообще не сработал. примеры взяты из книги Стивена Хольцнера Dynamic HTML: руководство разработчика. BHV, 1999, ISBN 966-552-013-X

предлагаю перенести тему в JavaScript.
IUnknown
Сообщения: 16
Зарегистрирован: 14 апр 2005, 17:54

write/writeln пробовал на IE и Opera (на опере вообще красота). Я не пойму почему эти функции обновляют весь фрейм так как они без всяких обновлений дописывают новые сообщения в конец старых (так как прокрутка не работает приходится еще после их добавления прокручивать страницу, что-бы было видно новое сообщение. А щелкание - это характерный звук который издает IE при загрузке новых даннных. Тут еще возникла идея - наткнулся в инете на скриптик(адресс не помню, но имкал по словам "непрерывная загрузка сообщений") который может динамически подкгужать данные из сервера (пример там был такой как в гугле - пишешь первые несколько букв слова и он подгружает данные совпадающие с начальными буквами - типа фильтр такой). Недостаток один - все теги должны быть заключены в тег <script></script> - нах не знаю. А с помощью innerHTML пробовал, что-то не выходит, а с write все просто тип-топ :)
Ответить