nxweb для динамического контента

163 views
Skip to first unread message

Andrew

unread,
Apr 25, 2012, 12:56:14 PM4/25/12
to nxweb-ru
Hi!

Я скачал и запустил последнюю версию nxweb (3?) и ее
производительность на статическом контенте меня порадовала. Однако, я
сразу задумался над тем, как можно запускать скрипты на других языках
(по аналогии с модулями apache или hadler-ами в G-WAN).

Бегло просмотрев документацию я не нашел ответа на этот вопрос. Есть
ли какие-нибудь соображения на этот счет?

Хотелось бы прежде всего понять
1. Как передать данные о запросе в скрипт?
2. Как ограничить число порождаемых процессов-обрадотчиков
динамических скриптов?

Если никакой текстовой документации на этот счет нет, то подскажите,
какие исходники нужно смотреть...

/wbr, Andrew

Yaroslav

unread,
Apr 25, 2012, 5:39:47 PM4/25/12
to nxwe...@googlegroups.com
Для использования других языков есть два способа:

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

2) проксирование запроса к серверу приложений соответствующего языка. собственно, так я сам работаю с java.

Вообще nxweb задумывался для скорости, а для скорости нужен Си (ну или С++). Если нужна гибкость, то лично я предпочитаю проксирование.

Если вас интересует конкретно язык php, то проксировать на него надо через FastCGI. nxweb, к сожалению, пока в FastCGI проксировать не умеет.

По вашим вопросам:

1. Как передать данные о запросе в скрипт?

Это определяется исполняющим модулем соответствующего языка. Могу только подсказать, где их взять в nxweb - см. модуль hello.c
 
2. Как ограничить число порождаемых процессов-обрадотчиков
динамических скриптов?

nxweb не порождает процессы, только потоки (threads). Это может быть неприемлемым для некоторых исполняющих платформ (например, php не поддерживает потоки). если ваш обработчик будет порождать процессы, то ему предстоит и ограничивать их число. nxweb умеет ограничивать число потоков (см. файлы nx_workers.h и nx_workers.c).

Ярослав 

2012/4/25 Andrew <aje...@gmail.com>

Andrew

unread,
Apr 25, 2012, 6:09:18 PM4/25/12
to nxweb-ru
Hello, Yaroslav!

On 25 апр, 23:39, Yaroslav <yaro...@gmail.com> wrote:
> Для использования других языков есть два способа:
>
> 1) линковка исполняющей платформы языка непосредственно с nxweb, вызов из
> обработчика nxweb методов компиляции и исполнения исходного кода на нужном
> языке. честно говоря, не представляю, как это делается, но если это могут
> делать модули апача, то наверное и для nxweb можно написать аналогичный
> модуль. вопрос - стоит ли заморачиваться.

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

> 2) проксирование запроса к серверу приложений соответствующего языка.
> собственно, так я сам работаю с java.

Это понятно.

> Вообще nxweb задумывался для скорости, а для скорости нужен Си (ну или
> С++). Если нужна гибкость, то лично я предпочитаю проксирование.

Это тоже понятно, но серверов быстро отдающих статический контент (или
выполняющих С-шный код)
и так достаточно написано (тот же G-WAN). Хочется чуть большего.
Статика+динамика в одном флаконе.

> Если вас интересует конкретно язык php, то проксировать на него надо через
> FastCGI. nxweb, к сожалению, пока в FastCGI проксировать не умеет.

Нет, php не очень интересует. Уж больно он медленный и тяжелый.

Я задумываюсь скорее о Lua. Проигрыш в производительности относительно
С не такой уж большой,
да и среда легкая. Т.е. я ожидаю что время выполнение скрипта будет
сравнимо со скоростью отдачи
статического файла.


> По вашим вопросам:
>
> 1. Как передать данные о запросе в скрипт?
>
>
>
> Это определяется исполняющим модулем соответствующего языка. Могу только
> подсказать, где их взять в nxweb - см. модуль hello.c

Ок. Спасибо, посмотрю.

> > 2. Как ограничить число порождаемых процессов-обработчиков


> > динамических скриптов?
>
> nxweb не порождает процессы, только потоки (threads). Это может быть
> неприемлемым для некоторых исполняющих платформ (например, php не
> поддерживает потоки). если ваш обработчик будет порождать процессы, то ему
> предстоит и ограничивать их число. nxweb умеет ограничивать число потоков
> (см. файлы nx_workers.h и nx_workers.c).

Ага, ясно.
Поскольку смысла в порождении обработчиков в большом количестве
(больше чем процессорных ядер) нет, я и задумался на эту тему.
С другой стороны - нужно где-то сохранять приходящие запросы.

В любом случае - спасибо за оперативный ответ.

Andrew

unread,
Apr 26, 2012, 12:57:10 PM4/26/12
to nxweb-ru
Hello, Yaroslav!

On 25 апр, 23:39, Yaroslav <yaro...@gmail.com> wrote:

> Для использования других языков есть два способа:
>

> Это определяется исполняющим модулем соответствующего языка. Могу только
> подсказать, где их взять в nxweb - см. модуль hello.c

Ok.

Сделал все по вашим рекомендациям - работает нормально.
Производительность выполнения
скриптов практически не страдает. Накладные расходы невелики. Однако
это был вариант
с обычным Lua. Теперь попробую прикрутить LuaJit.

/wbr, Andrew

Reply all
Reply to author
Forward
0 new messages