Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть работка :) Разработать мини-вебсервер. оплата 200 евро 
:(
    Опции темы
Wowa
Дата 25.4.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Разработать мини-ява вебсервер. Оплата 200 евро.
Подробности тут:
http://vingrad.ru/projects/361.html
PM WWW   Вверх
Vasay
Дата 25.4.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Товарищ Wowa, а Вы форумом не ошиблись  smile  Для найма специалистов есть отдельный форум smile 
Сейчас придет злой админ и Вас забанит  smile 

п.с. пара вопросов
1. не совсем понятен данный пункт: "2. Если нет, то посмотреть в мемкеше на каком-нить другом сервере. Есть ли там такая инфа."
2. Это должен быть именно вебсервер, или это можно сделать на, скажем, TomCat-е?

Опишите подробней задачу.

Это сообщение отредактировал(а) Vasay - 25.4.2009, 17:51


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Wowa
Дата 25.4.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Vasay @  25.4.2009,  16:41 Найти цитируемый пост)
1. не совсем понятен данный пункт: "2. Если нет, то посмотреть в мемкеше на каком-нить другом сервере. Есть ли там такая инфа."

объясняю. Планируется высокая нагрузка. Поэтому такие явовские веб-сервера будут запущены на N машинах.  Сначала смотрять наличие данных у себя в памяти, если их нет, то в распредленной кеш-системе мемкеш. К этой кеш-системе все сервера доступ имеют.


Цитата(Vasay @  25.4.2009,  16:41 Найти цитируемый пост)
2. Это должен быть именно вебсервер, или это можно сделать на, скажем, TomCat-а?

именно веб-сервер. т.к. нагрузка планируется большая. Томкат промежуточным слоем делать нет никакой необходимости. Даже мои скажем так скудные знания ява позволяют мне создать на нем веб-сервер за 15 минут.. Т.е. не думаю, что это проблема.

Есть еще вопросы? smile
PM WWW   Вверх
Vasay
Дата 25.4.2009, 18:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Wowa, 

Мне кажется, вы изобретаете велосипед. 

Не стоит гнаться за производительностью (особый прирост все равно не получите). Возьмите сервер приложений в связке с БД. Настройте connection pool. Как только производительности станет не хватать - создайте кластер и настройте балансировку нагрузки (можно делать отдельно для БД и сервера приложений).

Это обойдется вам дешевле, чем писать сервер с нуля. 

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


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
COVD
Дата 25.4.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Томкат промежуточным слоем делать нет никакой необходимости

В Томкате необходимость есть. Потому, что кто-то должен слушать 80 порт, парсить http запросы и отправлять http ответы. Самим писать эту часть, т.е. http server,  давно уже нет необходимости. И этот "Томкат" (или что-то подобное) может быть как standalone , так и компонент сервера приложений. Самим надо писать подготовку ответа на запрос, всю эту логику - поискать там, поискать здесь и т.д. И это приложение (по сути, это сервис), которое будет заниматься подготовкой ответа, никакого отношения к словам web или http не имеет. Если только оно само не реализовано как веб сервис (но в этом нет острой нужды, если это сервис для внутренних нужд и в локальной сети).     


Это сообщение отредактировал(а) COVD - 25.4.2009, 21:22
PM MAIL   Вверх
Wowa
Дата 25.4.2009, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(COVD @  25.4.2009,  20:10 Найти цитируемый пост)
В Томкате необходимость есть. Потому, что кто-то должен слушать 80 порт и обрабатывать http запросы. Самим писать эту часть, т.е. http server,  давно уже нет необходимости.

да как же в этом нет необходимости, если это несколько строчек кода всего-лишь? Мне потому и нужна ява, чтобы не использовать громоздкий вебсервер. Иначе бы я Апаче заюзал или его легковесный вариант.

Добавлено @ 21:19
Запускается прога, которая висит в памяти и слушает все время заданный порт. Как только поступает определенный запрос, то прога его обрабатывает.

Добавлено @ 21:26
Вот и весь веб-сервер. С поддержкой тредов.
Код

public final class WebServer {

    static ServerSocket ss;
    static Socket mysocket;

    public static void main(String[] args) {

        // Set the port number.
        int port = 8080;

        // Establish the listen socket.
        try {
            ss = new ServerSocket(port);
        } catch (IOException e) {
            System.out.println("Socket error");
            System.out.println(e);
        }

        try {
            // Process HTTP service requests in an infinite loop.
            while (true) {

                System.out.println("Слушай сокет");
                mysocket = ss.accept();

                HttpRequest request = new HttpRequest(mysocket);
                Thread thread = new Thread(request);
                thread.start();

            }
        } catch (Exception e) {
            System.out.println(e);
        }

    }

}



Код

final class HttpRequest implements Runnable {
....

    // Implement the run() method of the Runnable interface.
    public void run() {
        try {
            processRequest();
        } catch (Exception e) {
            System.out.println(e);
        }

        System.out.println("run");
    }
...

private void processRequest() throws Exception {

        // Get a reference to the socket's input and output streams.
        InputStream is = this.socket.getInputStream();
        DataOutputStream os = new DataOutputStream(this.socket.getOutputStream());

        // Set up input stream filters.
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String requestLine = br.readLine();

...

        // Send to DataOutputStream
        // Send the status line.
        os.writeBytes(statusLine);

        // Send the content type line.
        os.writeBytes(contentTypeLine);

...

        // Close streams and socket.
        os.close();
        br.close();
        socket.close();

    }




}

PM WWW   Вверх
COVD
Дата 25.4.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Запускается прога, которая висит в памяти и слушает все время заданный порт. Как только поступает определенный запрос, то прога его обрабатывает. 

Вот этим Томкат и занимается. Больше ничем и не должен. Сервлет, пропарсив запрос, должен отослать параметры запроса на другое приложение (сервис, который что-то ищет в памяти или еще где),  дождаться ответа сервиса и переслать его клиенту. От Томката больше ничего не требуется. Это http server.  В Апаче функции, аналогичные  сервлету, выполняет cgi скрипт, очевидно. В обоих случаях (Апач или Томкат) не стоит возлагать на них что-либо кроме их прямой обязанности - обслуживания http запрос-ответ. 

Это сообщение отредактировал(а) COVD - 25.4.2009, 21:39
PM MAIL   Вверх
Wowa
Дата 25.4.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



COVD, зачем мне томкат, если минимальный код выше делает все необходимое?
PM WWW   Вверх
COVD
Дата 25.4.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

COVD, зачем мне томкат, если код выше делает тоже самое?


Так я вас не отговариваю, используйте свой код. Вы предполагаете, что ваш код лучше работает, чем Апач или Томкат? Или вы место на диске экономите? Они, по крайней мере, являются индустриальным стандартом. 

Это сообщение отредактировал(а) COVD - 25.4.2009, 21:48
PM MAIL   Вверх
Wowa
Дата 25.4.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(COVD @  25.4.2009,  20:45 Найти цитируемый пост)
Так я вас не отговариваю, используйте свой код. Вы предполагаете, что это быстрее работает, чем Апач или Томкат? Они по крайней мере являются индустриальным стандартом.  

Ну я же описал задачу, а вы мне Томкат предлагаете, когда необходимый функционал, на мой взгляд, делается кодом изложенным выше и работать будет конечно быстрее чем Апаче и Томкат.
PM WWW   Вверх
COVD
Дата 25.4.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я не думаю, что отказ от стандартных http серверов решает проблему высокой нагрузки или является весомым вкладом. т.е. я согласен с мнением Vasay "Не стоит гнаться за производительностью..".
PM MAIL   Вверх
Vasay
Дата 25.4.2009, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Wowa, 

Цитата

работать будет конечно быстрее чем Апаче и Томкат. 


Вы в этом так уверены? 

Тот код, который Вы привели до нормальной работоспособности еще писать и писать. 

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

Да, используя томкэт, у вас не будет проблем с балансировкой нагрузки - томкэт умеет работать на кластере.  


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Wowa
Дата 25.4.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(COVD @  25.4.2009,  21:03 Найти цитируемый пост)
Я не думаю, что отказ от стандартных http серверов решает проблему высокой нагрузки или является весомым вкладом.

нужно ОЧЕНЬ много запросов обрабатывать. Поэтому любая экономия это огромный плюс. Load balancer кидал бы запрос к одному из сотни серверов(с этим вебсервером). Далее явапрога делала бы своё дело.

Добавлено @ 22:09
Цитата(Vasay @  25.4.2009,  21:04 Найти цитируемый пост)
Да, используя томкэт, у вас не будет проблем с балансировкой нагрузки - томкэт умеет работать на кластере.   

а какая у меня сейчас проблема с балансировкой? есть балансировщик и он кидает обращение на любой из серверов.

Добавлено @ 22:11
Цитата(Vasay @  25.4.2009,  21:04 Найти цитируемый пост)
Для начала нужно ввести ограничение на количество открытых сокетов, придумать, что делать с теми для кого уже нет свободного.... и пошло поехало.

что еще нужно?

Добавлено @ 22:12
Цитата(Vasay @  25.4.2009,  21:04 Найти цитируемый пост)
Вы в этом так уверены? 

конечно уверен. Есть апаче, а есть lighthttpd, есть nginx. Это легковесные вебсервера и поэтому работают быстрее. А в моем случае даже их весь функционал не нужен.
PM WWW   Вверх
Vasay
Дата 25.4.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

а какая у меня сейчас проблема с балансировкой? есть балансировщик и он кидает обращение на любой из серверов.


Все зависит от задачи... Может и не будет проблем, может и будут. Как насчет сессий? Кто будет отвечать за их поддержание (если они нужны).



Цитата

что еще нужно?


Придумать как обрабатывать и логгировать эксепшены. 




--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Wowa
Дата 25.4.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Vasay @  25.4.2009,  21:39 Найти цитируемый пост)
Все зависит от задачи... Может и не будет проблем, может и будут. Как насчет сессий? Кто будет отвечать за их поддержание (если они нужны).

сессии не нужны.


Цитата(Vasay @  25.4.2009,  21:39 Найти цитируемый пост)
Придумать как обрабатывать и логгировать эксепшены. 

если коннект не произошел, то он не произошел.  Если эксепшен на уровне ниже(например нет коннекта к БД), то его что с Томкатом, что без него обрабатывать надо.

Добавлено @ 22:48
Цитата(Vasay @  25.4.2009,  21:39 Найти цитируемый пост)
Все зависит от задачи... Может и не будет проблем, может и будут. К

Да нет там проблем. Все вебсервера незавимые друг от друга и помимо своего локального кеша, прикрыты центральным кешем-мемкешом(который через сокет работает). Поэтому даже если в локальном кеше какого-то сервера данных не будет, то он их с мемкеша получит. Данные кеша НЕ устаревают, т.е. отсутствует даже проблема их валидации. На один и тот же запрос всегда один и тот же ответ должен приходить.
PM WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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