Извините, а можете дать какие нибудь ссылочки полезные, или хотя бы ключевые слова, как поискать нужную информацию?
А то так заманчиво написано «обязательно решение прокуратуры» и т.п., что сразу хочется этим воспользоваться :)
Когда в джаве появилось логгирование, я его попробовал, не понравилось, вернулся на log4j и по сей день им пользуюсь.
Кстати сменить логгер — ни каких проблем (массовый реплэйс с регэкспами), только вот за много лет этого делать ни разу не понадобилось, поэтому меня не парит что коде стоят импорты org.apache.log4j.
Что то не работает ссылка с книгой которая в топике указана — www.truemoral.ru/up_oglav.html
Уже прикрыли? :(
Есть у кого нибудь копия, а то я только пол книги успел прочитать.
Rfc2616 это спецификация протокола HTTP/1.1 а не определение HTTP сервера.
Есть серверы которые не поддерживают спецификацию.
Не удивлюсь, если тот же Nginx не поддерживает спецификацию в полном объеме.
Или взять те же браузеры, далеко не все из них работают по спецификациям, и что же, значит они теперь не браузеры?
Давай тогда уж ссылку на источник что ли, откуда у вас взялось такое определение HTTP-сервера.
Выше в этой ветке я писал определение с ссылкой на википедию.
И кстати это не абстракция, а рабочая программа. Которая между прочим очень даже реальна, сервер можно запустить и зайти по ссылку с браузера и увидеть HTML.
Вы не правы, потому что скачать файл(FTP клиентом) или отправить почту(SMTP клиентом) не сможете при помощи этого сервера, но зайти браузером и увидеть HTML можно, Вы просто попробуйте и поймете.
И мой сервер кстати отдает заголовки, и имя сервера, и тип контента и длину контента, и даже предупреждает что закроет сокет (по протоколу HTTP/1.1 между прочим).
Это делает вот этот кусок кода:
Проблемы нет, сервер принимает HTTP-запросы, и отдает HTTP ответы, проверить это Вы можете легко.
Может быть Вас это удивит, но не все программы слушающие порт являются демонами.
В примере ни чего не ограничено, такой сервер не имеет права на жизнь :)
Вы абсолютно правы, большинство серверов можно положить кучей способов, но так же существует и куча различных защит.
Например, в качестве защиты от кучи коннектов с медленной отсылкой хедеров, можно установить максимальное количество коннектов с одного IP. И делать это можно как средствами самого сервера, так и средствами файрвола.
Вообще то так делают почти все сервера, позволяющие выполнять бизнес логику во время запроса.
Для бизнес логики ведь нужен тред, да и программировать проще, когда выполнение одного куска кода идет в одном триде.
Просто обычно количество тридов ограничено, например не больше 100, и все они берутся из пула, а если все заняты, то пришедший запрос ожидает в очереди, пока освободится какой нибудь трид.
:)
Ну если ограничиваться джавой то resin, tomcat, jetty, можно еще продолжить.
Но я обозначил суть — показать что такое Socket, InputStream, OutpuStream, Thread.
Http сервер был выбран мной лишь потому что это ближе хабрасообществу, чем какой то абстрактный tcp сервер.
Хотя я бы никогда и ни кому не посоветовал бы использовать com.sun.net.httpserver, ни для каких целей вообще, есть вещи которые отмирают, это мертвый код, который абсолютно бесполезен, даже с точки зрения обучения.
Хочу так же заметить, что написание примеров с велосипедами ни как не связано.
А вообще, формально Вы конечно же правы, задача именно так ставилась (быстро сделать http-сервер).
Но может я не совсем точно сформулировал постановку задачи к своему решению, но показать людям я хотел именно этот код, он полезен и понятен, а кому то даже понравился.
Это не «http сервер» за 15 минут, а «http сервер за 15 минут».
Кстати о демонах, если Вы вот это имеете ввиду, то скажу что моя программа выполняется не в бэкграунде, а фореграунде, так что это скорее всего не демон.
Я про многое на Хабре читаю что можно найти по инету. Однако далеко не все занимаются поиском всего.
Я например про разбор нетбуков никогда не искал, но здесь почитываю, потому что пишут.
А если говорить о том, место ли посту на главной или нет — я бы половине постов с главной сказал бы «нет» :)
Да не воспринимайте близко к сердцу. Недавно тут был пост про программку в 256 байт, которая 3D рисует.
Обычно маленькие вещи очень далеки от гибкости/универсальности и т.п., и уж подавно не соответствуют никаким RFC, да и цели у них другие.
Вы попробуйте скомпилировать, запустить и получить кайф от того что оно заработало :)
А то так заманчиво написано «обязательно решение прокуратуры» и т.п., что сразу хочется этим воспользоваться :)
Кстати сменить логгер — ни каких проблем (массовый реплэйс с регэкспами), только вот за много лет этого делать ни разу не понадобилось, поэтому меня не парит что коде стоят импорты org.apache.log4j.
Уже прикрыли? :(
Есть у кого нибудь копия, а то я только пол книги успел прочитать.
Есть серверы которые не поддерживают спецификацию.
Не удивлюсь, если тот же Nginx не поддерживает спецификацию в полном объеме.
Или взять те же браузеры, далеко не все из них работают по спецификациям, и что же, значит они теперь не браузеры?
Выше в этой ветке я писал определение с ссылкой на википедию.
И кстати это не абстракция, а рабочая программа. Которая между прочим очень даже реальна, сервер можно запустить и зайти по ссылку с браузера и увидеть HTML.
И мой сервер кстати отдает заголовки, и имя сервера, и тип контента и длину контента, и даже предупреждает что закроет сокет (по протоколу HTTP/1.1 между прочим).
Это делает вот этот кусок кода:
Вы просто невнимательно смотрели в код.
Может быть Вас это удивит, но не все программы слушающие порт являются демонами.
Вы абсолютно правы, большинство серверов можно положить кучей способов, но так же существует и куча различных защит.
Например, в качестве защиты от кучи коннектов с медленной отсылкой хедеров, можно установить максимальное количество коннектов с одного IP. И делать это можно как средствами самого сервера, так и средствами файрвола.
Для бизнес логики ведь нужен тред, да и программировать проще, когда выполнение одного куска кода идет в одном триде.
Просто обычно количество тридов ограничено, например не больше 100, и все они берутся из пула, а если все заняты, то пришедший запрос ожидает в очереди, пока освободится какой нибудь трид.
:)
Но я обозначил суть — показать что такое Socket, InputStream, OutpuStream, Thread.
Http сервер был выбран мной лишь потому что это ближе хабрасообществу, чем какой то абстрактный tcp сервер.
Хотя я бы никогда и ни кому не посоветовал бы использовать com.sun.net.httpserver, ни для каких целей вообще, есть вещи которые отмирают, это мертвый код, который абсолютно бесполезен, даже с точки зрения обучения.
Хочу так же заметить, что написание примеров с велосипедами ни как не связано.
А вообще, формально Вы конечно же правы, задача именно так ставилась (быстро сделать http-сервер).
Но может я не совсем точно сформулировал постановку задачи к своему решению, но показать людям я хотел именно этот код, он полезен и понятен, а кому то даже понравился.
Кстати о демонах, если Вы вот это имеете ввиду, то скажу что моя программа выполняется не в бэкграунде, а фореграунде, так что это скорее всего не демон.
Я например про разбор нетбуков никогда не искал, но здесь почитываю, потому что пишут.
А если говорить о том, место ли посту на главной или нет — я бы половине постов с главной сказал бы «нет» :)
Общее то что он отвечает браузеру, и страница отображается.
Обычно маленькие вещи очень далеки от гибкости/универсальности и т.п., и уж подавно не соответствуют никаким RFC, да и цели у них другие.
Вы попробуйте скомпилировать, запустить и получить кайф от того что оно заработало :)