Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разработа чата на AJAX + ?? Правильное/логично/простое решение.. 
V
    Опции темы
affka
Дата 25.9.2007, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



Вот озадачился таким вопросом.. Хотелось бы выслушать опытных программистов.
У меня есть такой набор мыслей.

Вариант первый.
Клиент - AJAX, который посылает через AJAX каждые n секунд запрос на сервер, мол не изменилось ли чего там?
Сервер - пхп/перл.. не столь важно.. обработать такую информацию не затратит много усилий, если ставить разумное значение n.

Вариант второй.
Клиент - Флеш (или тот же активх/аякс, если такое там возможно)
Сервер - демон, написанный на си/перле, который постоянно включен.
Клиент с сервером создаёт постоянное TCP-IP соединение по определённому порту..
Не знаю возможно ли такое вообще, но вроде я где-то такое читал и даже примеры видел..

Ну вот пока что пара самых нормальных вариантов.. Варианты с фреймом и почими извратами прошу не обсуждать..
Хотелось бы так же знать как реализуется большинство чатов на аяксе.. как первый вариант?

ЗЫ: Прошу модераторов/админов извинить, если я создал не в том подфоруме.. ИМХО, этот подфорум больше всего подходит.. Если нет - переместите..
PM MAIL   Вверх
Avb
Дата 26.9.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.7.2006

Репутация: 4
Всего: 13



Цитата(affka @  25.9.2007,  18:03 Найти цитируемый пост)
Хотелось бы так же знать как реализуется большинство чатов на аяксе.. как первый вариант?

Думаю, что да - как первый.

Второй вариант лучше. Ход мыслей правильный. Подробностей я не знаю, но реализовывать нужно с помощью flash socets (широковещательная рассылка). А за подробностями обращайтесь в соответствующий подфорум.
PM MAIL   Вверх
affka
Дата 26.9.2007, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



Ну да.. второй лучше.. однако мне не хочется работать с флешем, хотя я и экшн скрипт знаю.. просто он может не у всех стоять или из соображения безопасности его кто-нить вырубит.. да и в конце концов получается что весь чат прийдётся писать во флеше.. не годится короче. Хотелось бы всё-таки узнать можно ли через аякс это делать?.. (ну или ещё что-нибудь, что поддерживает большинство актуальных броузеров..)

Добавлено через 4 минуты и 45 секунд
вот кстати тема про сокеты.. там даже примеры есть.. (хотя прямое соединение с пхп - это изврат, конечно.. даже представить такое сложно %) )
http://forum.vingrad.ru/forum/topic-51094/...cket/index.html
PM MAIL   Вверх
ksnk
Дата 26.9.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



А что мешает написать все это с Ajax'ом? imho, на флеше чат делать - разве что ради красивостей и удобностей флешовых, а не заради пущей оперативности доставки сообщений... Для повышения оперативности можно поменять логику опроса "новых сообщений". К примеру, пусть в нормальном состоянии все клиенты чата опрашивают сервер раз в 30 секунд. Если юзер начинает набивать ответ - на сервер уходит сигнал "набивает...", и все, кто успел опросить сервер за время от этого сигнала до реальной посылки начинают опрашивать сервер чаще, к примеру, раз в 10 секунд... Реактивность системы несколько повышается...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GZep
Дата 26.9.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


Профиль
Группа: Завсегдатай
Сообщений: 1528
Регистрация: 7.7.2006
Где: Москва

Репутация: 2
Всего: 32



а вот я посоветую использовать java аплет.

А еще можно совмещать различные технологии - кто где лучше работает.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Avb
Дата 26.9.2007, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.7.2006

Репутация: 4
Всего: 13



ksnk, конечно же сделать не мешает ничего. Но аяксовые запросы - это и потенциальные утечки памяти в браузере, и (при большом кол-ве пользователей) нагрузка на сервер. Сделать можно, и многие делают, и работает неплохо. 
Но (и это не только мое мнение) широковещательные рассылки лучше.
Цитата(GZep @  26.9.2007,  18:22 Найти цитируемый пост)
А еще можно совмещать различные технологии - кто где лучше работает.

Поддерживаю. Я это и имел в виду.
Цитата(affka @  26.9.2007,  14:18 Найти цитируемый пост)
 да и в конце концов получается что весь чат прийдётся писать во флеше

Мое предложение - не писать все на флеше, а держать на странице невидимую флешину, которая слушает рассылку и при необходимости дергает javascript. По скольку я это не реализовывал, то подробно рассказать не могу.
Цитата(affka @  26.9.2007,  14:18 Найти цитируемый пост)
просто он может не у всех стоять или из соображения безопасности его кто-нить вырубит

Да. Это ограничение присутствует. Более того есть особенности при обращении к javascript из flash в разных броузерах на разных платформах (сталкивался).
Есть компромис:
сделать оба варианта. Если флеш есть - работает флешевая рассылка, если нет - AJAX.

Подходит? smile

PM MAIL   Вверх
affka
Дата 26.9.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



бээ.. сильно муторно.. ну по крайней мере для меня. Тобишь то, для чего я это собираюсь делать того не стоит smile
Ещё бы хотелось узнать про серверную часть.. Кто что прелагает?..

А вообще может у кого-нить есть примеры в действии? Только не предлагать к просмотру чат на аяксе или чат на флеше.. может быть есть совмещённое, о чём мы с вами сейчас говорим..? :о)


Цитата(GZep @  26.9.2007,  18:22 Найти цитируемый пост)
а вот я посоветую использовать java аплет.

Ну яву мне вообще не хочется трогать.. уж она точно на безопасность кусается прилично.. и далеко не всякий пользователь даст разрешение.. ИМХО..
PM MAIL   Вверх
ksnk
Дата 26.9.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(affka @  26.9.2007,  19:49 Найти цитируемый пост)
может быть есть совмещённое

Мнэээ.... А о чем это мы говорим ? smile Совмещенное с чем?
насколько я понял - тут звучали два принципиально разных, не пересекающихся почти ни в чем подхода. Метод опроса и метод установки прямого соединения. Для первого случая ничего проще ajax+PHP, к примеру, или, там, Perl, придумать сложно. Для второго предполагается разрешения у клиента на запуск флеш или Java-апплетов. Так как только они имеют возможность устанавливать это самое соединение. На серверной стороне должно быть что-то посложнее PHP. Конечно, можно и на нем написать TCP демона, но лучше - не надо... К примеру та-же Java, для пущей переносимости... 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bronenos
Дата 26.9.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



непрерывный коннект
PM MAIL   Вверх
Alx
Дата 27.9.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



ну не знаю, собственно...
я как раз сейчас делаю на ajax:
посылаем запрос серверу, где указываем последний id скачанного сообщения. сервер обращается к БД, выбирая из таблички новые сообщения, кидает их в JSON обратно. на клиенте распарсиваем по получении и вставляем куда надо. сразу же делаем новый запрос. я лично даже никаких задержек не использую..

Добавлено через 10 секунд
могу показать, кому интересно


--------------------
PM MAIL WWW ICQ   Вверх
ksnk
Дата 27.9.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Alx, А в локалке чат на 100 человек промоделировать пытался? Не всякая машина в таком случае "долетит" smile. Разумнее, imho, задержки все-таки использовать, но ставить их по началу посылки запроса новых сообщений. В случае, если предыдущий запрос не закончился - ставим флажок, если закончился - перезапрашиваем. Ну и по завершении запроса по флажку - перезапускаем запрос... Так будет сложнее завалить сервер в моем примере ;)


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Alx
Дата 27.9.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



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


--------------------
PM MAIL WWW ICQ   Вверх
ksnk
Дата 27.9.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Alx, я про то, что в локальной сети время для пересылки отработки запроса/данных  будет очень маленьким и 100 клиентов в состоянии будут неслабо нагрузить сервер. К тому-же есть ли смысл получать новые сообщени несколько раз в секунду?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
affka
Дата 28.9.2007, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



я думаю стоит всё-таки делать задержки. причём можно сделать условия: если в чате мало народу - задержки будут маленькие.. если увеличиваются, то и задержки тоже будут расти. Задержки будет расчитывать сервер и передавать каждому клиенту.. Таким образом мы не допустим чтоб сервак загнулся.. И это думаю разумное решние, даже если чат будет тормозить...
Ещё можно подумать насчёт "пользователь набирает сообщение".. о чём писал ksnk, но имхо это будет только лишь создавать лишние запросы.. другое дело если бы набирались длинные сообщения.. а то сильно малое время проходит от начала набора сообщения до его отправки...

Цитата(Alx @  27.9.2007,  14:57 Найти цитируемый пост)
на клиенте распарсиваем по получении и вставляем куда надо.

ну распарсивать там сильно не надо.. просто XML тупо используем и всё..

Цитата(Alx @  27.9.2007,  15:51 Найти цитируемый пост)
 так я вызваю новый запрос только когда получаю данные от предыдущего.. то есть точно знаю, что он уже выполнился..

чё-то я не понял что ты хотел сказать.. т.е. ты, чтобы получить данные делаешь ещё один запрос? а не проще все данные отправить в предыдущем? :/ Зачем?!
PM MAIL   Вверх
Alx
Дата 28.9.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



affka, я получаю JSON-массив с сообщениями в виде JSON-объектов, содержащих в себе время сообщения, ник, id, и собстенно текст. а на клиенте уже средствами JavaScript генерирую HTML, распределяю сообщения по адресатам (если это приват) и форматирую их.

нет. отправил запрос - ..ждём.. - получил результат - (можно сделать задержку) - отправил запрос - ..ждем.. - получил рузультат,.. и т.д. 


--------------------
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.