Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Интернет-чат на Ява. Очень легко.


Автор: Wowa 6.2.2006, 02:54
Мне тут вот стало непонятно, почему вообще пишут чаты на PHP ??? Это ведь очень большую нагрузку создается.

На Яве можно легко и быстро создать Servlet, который бы висел в памяти и все сообщения также в памяти хранил бы.

Автор: sergejzr 6.2.2006, 03:07
Вопрос даже шире. Почему вообще веб - приложения на ПХП пишуться?
Ответ у меня в голову пришёл типа такого:
память на сервере конечно хорошо использовать, но только, если там не хостинг на несколько сотен/тысяч юзеров. там лучше диск юзать. Дешевле, а скорость роли большой не играет, ведь люди с реальными пректами сами позаботятся о сервере.
Так же на яве можно легко сделать new byte[очень_большое_число]; и забрать себе всю память smile

Потом ПХП всё ещё намного легче как язык программирования, да и что говорить, с кодировами и БД разбираться много не надо. В яве нужны навыки и настройка по типу "один раз и навсегда".

Всё же это похоже на религиозные войны Ява против ПХП. Где то у нас уже велись они smile

По сабжу - чат на яве конечно реактивная альтернатива, практически не напрягающая сервер (Это при условии, что сохранять сообщения не надо на диск, инача оба решения примерно одинаковы)

Автор: Nobody 6.2.2006, 17:18
Потому что очень мало хостингов где есть ява. А выделенный сервер не все могут себе позволить.

Автор: Tirael 6.2.2006, 21:09
Wowa, расскажи поподробнее про создание чатов на Ява с использованием Servlet и JSP.
Я искал исходники и инфу про создание чатов на Java. Практически везде описываются чаты на основе Сокетов и Аплетов.
Нашел только пару на Servlets и JSP. Но нет никакого документации по их созданию. Только исходники. Сижу копаюсь, перенимая ошибки автора и пытаясь понять что же он имел ввиду.

Хотелось бы услышать сообественно как следовало бы строить чат на основе Servet'ов и JSP. Саму теорию. В общих чертах.

Автор: sergejzr 6.2.2006, 21:19
Цитата(Tirael @ 6.2.2006, 19:09 Найти цитируемый пост)

Хотелось бы услышать сообественно как следовало бы строить чат на основе Servet'ов и JSP. Саму теорию. В общих чертах.

Э... надо уж определится servlet или JSP smile
Чат на сервлете превращается в задачу на пару строк. так что там естесвенно никаких теорий искать нечего. Последние X сообщений хранятся в памяти. Там достаточно List взять и указателем ходить по нему, возвращаясь от последнего к первому. Пришло новое сообщение? добавь узел в list на место указателя, а старый узел выкинь и передвинь указатель дальше. Пришёл запрос на распечатку? иди вторым указателем от первого назад до полного круга.

Если с XMLHttpRequest, то вообще - отдавай узел, на котором указатель стоит и все узлы, которых у юзера ещё не было (определяешь по запросу).

Дай ссылок на коды, помотреть, что там народ повыдумывал smile

Автор: Nobody 6.2.2006, 23:23
http://demo.nextapp.com/ChatClient/app

Автор: sergejzr 6.2.2006, 23:43
Чтото они там со скриптом перемудрили!

Автор: Wowa 6.2.2006, 23:44
Цитата(sergej.z @ 6.2.2006, 21:43 Найти цитируемый пост)

Чтото они там со скриптом перемудрили!

почему? smile За счет чего он может комп грузить? smile

Автор: sergejzr 6.2.2006, 23:44
JS всмысле

Автор: Wowa 6.2.2006, 23:45
Цитата(sergej.z @ 6.2.2006, 21:44 Найти цитируемый пост)

JS всмысле

А, наверное..

Автор: sergejzr 6.2.2006, 23:47
Вон, смотри, сколько там скрипта
http://demo.nextapp.com/ChatClient/app?serviceId=Echo.ClientEngine
Интересно, сколько кода там реально нужно smile

Автор: Tirael 7.2.2006, 03:50
sergej.z, ну например пытаюсь разобраться вот в этом чате: http://www.web-tech-india.com/software/jsp_chat.php

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

Так вот как реализовать такой же принцип, но уже с использовнием сервлетов?

Автор: Wowa 7.2.2006, 03:57
Цитата(Tirael @ 7.2.2006, 01:50 Найти цитируемый пост)

отправляет сообщение, на серверной стороне оно получается и тут же рассылается всем пользователям

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

Автор: sergejzr 7.2.2006, 04:15
Цитата(Tirael @ 7.2.2006, 01:50 Найти цитируемый пост)

Так вот как реализовать такой же принцип, но уже с использовнием сервлетов?

Ты не можешь апплет заменить сервлетом smile это же две разные вещи.
Чат на апплете - вообще немного другая история. Конечно в плане трафа и скорости он оптимален. С другой стороны не у всех ява установлена. Да и ресурсы апплеты едят (хотя тут кривизна браузеров играет роль)
Лучший вариант - явяскрипт с использованием XMLHTTPRequest. Экономим рессурсы на клиенте и сервере. Минимум передаваемого трафа, максимум скорости.

Я бы делал такую связку явяскрипт-сервлет.

Цитата(Wowa @ 7.2.2006, 01:57 Найти цитируемый пост)

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

Там возможно реализовать типа: Клиент запросил инфу у сервера и ждёт ответа. Сервер отвечает только когда новые сообщения есть, а всё это время клиент "висит" в ожидании. Я так делал. Правда это были обе ява проги. В принципе апплет - сервлет - тоже самое.
Не знаю, как съест это XMLHTTPRequest и не вылетит ли по ConnectionTimeOut.



Автор: Nobody 7.2.2006, 13:41
Хех. Я делал так. Клиент открывает (в невидимом фрейме) коннект к серверу, сервер в него пишет новые поступающие сообщения и не закрывает соединение. Получам односторонний бесконечный коннект, через который сервер может слать все JS-команды.

Автор: Tirael 7.2.2006, 14:50
Цитата(Wowa @ 7.2.2006, 03:57 Найти цитируемый пост)

Цитата(Tirael @ 7.2.2006, 01:50 )

отправляет сообщение, на серверной стороне оно получается и тут же рассылается всем пользователям


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

Ну по крайней мере здесь https://www6.software.ibm.com/developerworks/education/j-chat/ описывается именно такой механизм: на сервер приходит сообщение и тут же отправляется всем клиентам.

Цитата(sergej.z @ 7.2.2006, 04:15 Найти цитируемый пост)

Лучший вариант - явяскрипт с использованием XMLHTTPRequest. Экономим рессурсы на клиенте и сервере. Минимум передаваемого трафа, максимум скорости.

Возможно, но к сожалению smile я плохо знаком с JavaScrip'ом и никогда не использвал XMLHTTPRequest. Изучаю сейчас Servlets и JSP и хотел бы опробовать именно их "в бою".

Автор: sergejzr 7.2.2006, 14:55
Цитата(Nobody @ 7.2.2006, 11:41 Найти цитируемый пост)

Хех. Я делал так. Клиент открывает (в невидимом фрейме) коннект к серверу, сервер в него пишет новые поступающие сообщения и не закрывает соединение. Получам односторонний бесконечный коннект, через который сервер может слать все JS-команды.


Да. И 100 -200 юзеров сервер вполне выдержит. Но тут надо конечно экцпериментальным путём определить, сколько соеденений сервер может держать.

Автор: Wowa 7.2.2006, 14:56
Цитата(sergej.z @ 7.2.2006, 12:55 Найти цитируемый пост)

Да. И 100 -200 юзеров сервер вполне выдержит. Но тут надо конечно экцпериментальным путём определить, сколько соеденений сервер может держать.

Это если они постоянно подсоединены? А если через ява-скрипт и HTTPrequest?

Автор: sergejzr 7.2.2006, 15:01
Цитата(Wowa @ 7.2.2006, 12:56 Найти цитируемый пост)

Это если они постоянно подсоединены?

Ага
Цитата(Wowa @ 7.2.2006, 12:56 Найти цитируемый пост)

А если через ява-скрипт и HTTPrequest?

Ну там стандартный механизм. Через определённые промежутки времени север опрашивается на наличие новых сообщений.

Преимущества и недостатки имеют обе архитектуры. Тут надо эксперименты ставить...

А вообще - лучше аськи чата нет smile

Автор: Tirael 7.2.2006, 15:10
Цитата(sergej.z @ 7.2.2006, 15:01 Найти цитируемый пост)

А вообще - лучше аськи чата нет

smile Что-то тема задумывалась, как обсуждение чата на Сервлетах. А в конце пришли к выводу, что надо пользоваться асей.
smile Кто-нибудь может дать краткое описание внутреннего устройства чата построенного на Сервлетах?? smile

Автор: sergejzr 7.2.2006, 15:39
Цитата(sergej.z @ 6.2.2006, 19:19 Найти цитируемый пост)

Чат на сервлете превращается в задачу на пару строк. так что там естесвенно никаких теорий искать нечего. Последние X сообщений хранятся в памяти. Там достаточно List взять и указателем ходить по нему, возвращаясь от последнего к первому. Пришло новое сообщение? добавь узел в list на место указателя, а старый узел выкинь и передвинь указатель дальше. Пришёл запрос на распечатку? иди вторым указателем от первого назад до полного круга.

Если с XMLHttpRequest, то вообще - отдавай узел, на котором указатель стоит и все узлы, которых у юзера ещё не было (определяешь по запросу).

А это что?

Автор: Tirael 7.2.2006, 17:01
Цитата(sergej.z @ 7.2.2006, 15:39)
Цитата(sergej.z @  6.2.2006,  19:19 Найти цитируемый пост)

Чат на сервлете превращается в задачу на пару строк. так что там естесвенно никаких теорий искать нечего. Последние X сообщений хранятся в памяти. Там достаточно List взять и указателем ходить по нему, возвращаясь от последнего к первому. Пришло новое сообщение? добавь узел в list на место указателя, а старый узел выкинь и передвинь указатель дальше. Пришёл запрос на распечатку? иди вторым указателем от первого назад до полного круга.

Если с XMLHttpRequest, то вообще - отдавай узел, на котором указатель стоит и все узлы, которых у юзера ещё не было (определяешь по запросу).

А это что?

smile Мало smile

Автор: Opik 5.3.2006, 01:15
Цитата(Tirael @ 7.2.2006, 02:50)
sergej.z, ну например пытаюсь разобраться вот в этом чате: http://www.web-tech-india.com/software/jsp_chat.php

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

Так вот как реализовать такой же принцип, но уже с использовнием сервлетов?

Супер чат, на памяти и всё такое.
Правда новые сообщения криво посылалаются, т.е просто обновляется окно. что не очень оптимально.
Да и обовляется он по таймауту. Я его переделывать начал, и вот что сделал:
1) Разделил на 4 фрейма (новый с юзерами, 1 невидимый)
2) Сообщения шлются через скрытый фрейм и скрипт ДОБАВЛЯЕТ только НОВЫЕ сообщения (через JS).
3) Исходя, из п2 понятно что добавил JS кода (приличное кол-во)
Вообщем получилось просто супер. Просто реактивно.
Сейчас дописываю регу. Так что чат с "потенциалом"... ) Очень благодарен за линк. Мне он очень жизнь облегчил!

Автор: Wowa 5.3.2006, 01:22
Цитата(Opik @ 4.3.2006, 23:15 Найти цитируемый пост)
Вообщем получилось просто супер. Просто реактивно.

На ПХП чат был бы имхо не так изящно реализован и тормозил бы сильно. Расскажи, как твое мнение относительно чата на яве smile

Автор: Opik 5.3.2006, 14:04
Wowa,
ну я реализовывал чат на PHP, на таком же принципе работы.
Сейчас реализовал это на яве - небо и земля.
И если учесть, что это ещё и на винде сейчас.... то вообще нечего говорить.

Автор: Tony 7.3.2006, 19:48
я делал так .Делал connect na jsp tam 2 ifraima.Odin bil svazan s servletom Каторий при заходе засипал (Thread.sleep()- toest stranica v iframe ne dozagruzalas' ,visela)I response + id usera lozil v List.A vo 2 iframe bila forma peshesh tekst -->submit .Servlet obrabatival probigal po listu i otsilal vsem .T.k v pervom iframe nedozagruzka to --> on videl tekst.
======================================================================
Voobse kogda ja hotel napisat' 4at na jsp ni4ego tolkogova ne nashol.Poetomu i pridumal takoe.Pri4om 4at prekrasno rabotal .Compik 64RAM, CPU 400,OS WIN.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)