[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: inetd хочется странного



On Tue, Oct 19, 2010 at 05:56:36PM +0400, Dmitry E. Oboukhov wrote:
> >> хочется некоторых фич от inetd, однако не знаю реализовывал ли их
> >> кто-нибудь.
> >> 
> >> в частности хочется опции prefork=n (вернее даже preexec), чтобы
> >> сократить время отклика на время форка и старта/инициализации
> >> приложения.
> 
> PP> Хмм, а что прикажете на file descriptor 0 новому процессу отдасть?
> PP> Нормально - там inet/Unix socket связи с клиентом стоит; чего подать
> PP> новому серверному процессу при preexec?
> 
> PP> Prefork на ниво inetd не даст премного доброго, если после того
> PP> exec надо делать, когда client connection придет.

[snip хороший performance analysis случаев с и без inetd]

> Ну и вот отсюда и возникли "странные желания": взять и приделать к
> inetd prefork с pre-exec.

Так вот inetd и создан для не очень натоваренных серверов, когда
такой оверхед приемлим.  Если Вы можете Ваш сервер дописать так чтоб
у него был собственный bind/listen/accept loop, inetd и не нужен.

(кроме случая, когда серверу нужно ждать и на inet, и на Unix socket,
и на чего-то еще...)

> то есть слушалка держит наготове N предварительно запущенных программ.
> в качестве stdin/stdout на них смотрит сокет. Все они спят на этом
> сокете (каждый на своем).
> 
> Затем приходит соединение, процесс форкается и в форке тупо гонятся
> данные из/в одного сокета в/из другой.

Наибольший проблем в такой схеме - невозможность inetd передать серверу
никакой информации о том какой клиент привязался.  Обычно, когда fd 0
и есть прямая связь с клиентом, сервер может сделать getpeername()
(и даже getsockname()) и "знать" все о клиенте.  В Вашем случае такая
информация можно передать только по каком-то допольнительном канале -
что-то нестандартное, которое не будет работать с существующими серверами.

Всего лучшего,
Петр

-- 
Peter Pentchev	roam@space.bg    roam@ringlet.net    roam@FreeBSD.org
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
What would this sentence be like if it weren't self-referential?

Attachment: signature.asc
Description: Digital signature


Reply to: