Comments 45
Почему же нет? Есть, IIS называется.
IIS не похож ни на Apache, ни на nginx. Совершенно другой принцип как конфигурации, так и работы с сетью.
Лучше иметь действительно хороший сервер под POSIX системы, чем так себе, но универсальный.
Да почему "или-или"? Ребята справляются.
src/
Total Physical Source Lines of Code (SLOC) = 1,522
Development Effort Estimate, Person-Years (Person-Months) = 0.31 (3.73)
(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months) = 0.34 (4.12)
(Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule) = 0.90
Total Estimated Cost to Develop = $ 41,993
src/unix
Total Physical Source Lines of Code (SLOC) = 13,355
Development Effort Estimate, Person-Years (Person-Months) = 3.04 (36.49)
(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months) = 0.82 (9.81)
(Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule) = 3.72
Total Estimated Cost to Develop = $ 410,741
src/win
Total Physical Source Lines of Code (SLOC) = 16,774
Development Effort Estimate, Person-Years (Person-Months) = 3.86 (46.35)
(Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months) = 0.90 (10.74)
(Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule) = 4.32
Total Estimated Cost to Develop = $ 521,807
То есть большая часть кода для платформ unix и win не пересекается. О чем я и пытался сказать в своем комментарии.
Ок, не пересекается. Но теперь можно взять эту либу (написанную один раз) и использовать. Это ничем не отличается от написания своих врапперов. Собственно это оно и есть. Просто системы довольно сильно отличаются. Но суть та же.
А вообще я отвечал на кусок
Другой вопрос — почему до сих пор нет чего-либо подобного nginx, изначально написанного под Windows, но это уже совсем другая история…
Он есть. Точнее, под libuv, но зачем писать что-то под платформу, когда можно писать кроссплатформенно, не теряя ничего.
Да почему «или-или»? Ребята справляются.
Что там пересекается или нет — деталь реализации. Раз есть удобный и быстрый интерфейс для кроссплатформенной работы, грех им не пользоваться.
Что же касается скорости — далеко не факт.
Если мне потребуется ускорить какой то оч нужный мне сценарий работы то я могу у себя сделать что угодно, а вот с такой либой я ничего сделать не смогу.
Тогда по заветам Алана Кея и железо под себя делать надо :) А то там подкрутить в процессоре чужом тоже ничего не получится.
Учитывая бенчи майкрософта вполне на уровне nginx работает kestrel на базе как раз libuv. Что на линуксах, что на винде. Ну и в плане мейнейнерства майкрософт вряд ли вложился бы в технологию-однодневку, и при любом раскладе у нас есть ментейнер, который будет это дело развивать. В случае изменения лиценхзии, то довольно редкое событие, всегда можно ответить такой операцией, как форк. Очень удобно.
Этот лимит вообще-то прописан в системных заголовочных файлах...
Лимит на число соединений при использовании select(), он же FD_SETSIZE, задаётся, к сожалению, только при компиляции. И при этом влияет на скорость любого вызова select(), т.к. битовые массивы соответствующего размера приходится копировать между приложением и ядром.
Значение по умолчанию для FD_SETSIZE на Windows — 64, что совсем смешно. При сборке бинарников, выкладываемых на nginx.org, мы ставим FD_SETSIZE в 1024, что выглядит разумным компромиссом между скорость и количеством возможных соединений. Особенно учитывая, что основная задача nginx/Windows — это тестирование.
Если этого мало — можно пересобрать из исходников с любым устраивающим вас значением (инструкция по самостоятельной сборке — тут). Или прислать патч, меняющие значение, используемое при стандартной сборке, как-то обосновав новое значение. Тут важно понимать, что лимит — всё равно будет, ибо select(). Вопрос только — какой именно, и что это будет означать с точки зрения производительности.
Подскажите, есть ли простой способ включить http2 с ALPN для современных браузеров на CentOS 7? Nginx из официального репозитория.
Плюс подхода в возможности иметь nginx с нужной версией openssl не трогая системную либу и в возможности кастомизировать пакет.
Как более легкий вариант- использовать docker с ОС, в которой нужная версия openssl.
Но нашу сборку надо использовать осторожно, т.к. много стандартных модулей отключено и много нестандартных добавлено.
Устанавливается так:
yum install http://repo.docker.ru/pub/linux/centos/7/noarch/docker-release-1-1.el7.noarch.rpm
yum install cdnnow-nginx
# nginx -V
nginx version: nginx/1.12.1
built with OpenSSL 1.0.2k-freebsd 26 Jan 2017
TLS SNI support enabled
configure arguments: … --with-http_realip_module …
Грузить динамически — точно нет. Собирать по умолчанию — возможно, в рамках оптимизации политики "что мы собираем по умолчанию", она сейчас получается сильно отличающейся от того, что мы же собираем в пакетах.
Впечатлений как от Плейбоя! Спасибо!
Имеется в виду только указанная дальше потеря соединений при уменьшении количества рабочих процессов?
Или что-то ещё?
Да, имеется в виду потеря соединений при закрытии сокетов, и соответственно при уменьшении количества рабочих процессов. Как недавно выяснилось, это приводило также к потере соединений при тестировании конфигурации, но этот негативный эффект легко исправить (и уже).
strong_equivalence
— что, согласитесь, с одной стороны интуитивно понятнее, а с другой не заставляет лезть в словарь и является сущностным переводом этого термина на «русский понятный».А при чём тут strong_equivalence, и что именно вы понимаете под этими словами? Ведь не strong equivalence principle же?
Что такое идемпотентность — известно из математики, и явно описывается в стандарте HTTP. А чтобы не лазить в словарь, мы и в документации описали.
Странно это, лезть в словарь чтобы посмотреть одно из базовых определений стандарта HTTP (как выше написали к тому же и из математики).
Вообще говоря, корректнее говорить про safe method.
Идемподентность не всегда возможна, разумеется, да и в rfc речь идет о "CAN", когда про safe method MUST.
Например, файл мог измениться. Или это метод, который отдает текущее время.
Имею в виду сущность слова, от лат. idem – тот же самый и potens – сильный, мощный; букв. – равносильность, но, конечно, правда ваша, конфигу лучше быть описанным в терминологии стандарта.
Когда встретил это слово в конфиге, пришло в голову именно при помощи словаря искать суть, потому что гугл выдал примерно это:

Даже он не очень в курсе, что это есть в доках nginx или в стандарте HTTP.
Что нового в nginx?