2010-07-29 2 views
3

я имел бы реализовать свой собственный веб-сервер в чистом Java веб-сервер должен поддерживать только статические ресурсы (например, HTML, JS, CSS, картинки, фильмы и т.д ..)Внедрение веб-сервера

Можете ли вы порекомендовать учебник или статью о том, как реализовать такую ​​вещь? Должен ли я использовать несколько процессов или пул потоков или я должен рассматривать loop-событие, ориентированное как NodeJS?

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

+0

Загрузите исходный код Apache Tomcat и посмотрите, как они их сделали? –

+2

@ Джентльмен: Я бы даже не попробовал это. Tomcat слишком сильно развит со слишком большим количеством конфигурационных возможностей, клапанов, расширений, просто слишком просто, чтобы посмотреть, как обрабатываются запросы, чтобы вернуть содержимое файла ... – f1sh

+0

@ The Elite Gentleman: Я попробовал это однажды ... Эта вещь огромна , –

ответ

1

Я рекомендую ознакомиться с форматом запроса HTTP http://datatracker.ietf.org/doc/rfc2616/. Реализация HTTP с нуля - это не маленький подвиг, но это, безусловно, хорошее учебное упражнение.

В самой Java для простоты я рекомендую использовать сервер нить за запрос - http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html - что используется для использования файлов java.nio. В параллельной настройке java.nio предпочтительнее java.io, потому что он балансирует нагрузку лучше. Скорее всего, вы найдете тесты, которые показывают, что java.io работает быстрее, но для последовательного однопоточного кода.

+1

Лучше попробовать java.nio2, если вы не против использования раннего доступа JDK 7. –

3

Я думаю, что это то, что вы хотите http://java.sun.com/developer/technicalArticles/Networking/Webserver/

+1

Почему многопоточность правильная? – DuduAlul

+0

Зависит от трафика и цели веб-сервера, если вы собираетесь обслуживать только статические страницы, я думаю, что это более простой и эффективный подход. Если вы собираетесь использовать комету или у вас будет намного больше, чем при одновременном управлении трафиком, вам не понадобится один поток на запрос, заблокированный, пока соединение открыто. –

3

Если вы делаете это упражнение, я рекомендовал бы модель, управляемые события.

Я не думаю, что есть один учебник по этой теме, потому что требуемое знание настолько далеко - HTTP-протокол, доступ к файлам, потоки и параллелизм, управление конфигурационными файлами, связь сокетов, протоколирование, обработка ошибок, MIME типы ... Да, даже просто обмен статическими ресурсами, это по-прежнему большой.

Читайте, и удачи!

1

Возможно, веб-сервер ACME интересен как отправная точка. Мы используем его для передачи файлов ad-hoc. Когда вы familarized себя с ним, вы можете увидеть, если вы можете обнаружить свои узкие места, а затем подумать о том, как это исправить :)

http://acme.com/java/software/Acme.Serve.Serve.html

0

Я хотел бы предложить Apache MINA, чтобы сделать работу. Он позволяет указать кодировщики/декодеры для правильной работы с протоколом HTT и вызывает метод при поступлении запроса и т. Д. Он обрабатывает управление потоками внутри. Я никогда не начинаю сетевой проект без него.

Смежные вопросы