К inetd или не к inetd… когда я должен использовать inetd для своей программы сетевого сервера?

StackOverflow https://stackoverflow.com/questions/390847

  •  23-08-2019
  •  | 
  •  

Вопрос

Может ли кто-нибудь дать краткий набор реальных соображений, которые повлияли бы на выбор того, использовать inetd для управления программой, которая действует как сетевой сервер?

(Если используется inetd, я думаю, это изменяет требования к сетевому коду в программе, поэтому я думаю, что это определенно связано с программированием, а не с общим)

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

Это было полезно?

Решение

Это зависит от схемы использования вашего сервиса.Если время запуска вашего демона невелико, и вы ожидаете, что он будет использоваться нечасто, то inted может подойти.Это уменьшает или даже устраняет необходимость написания какого-либо дополнительного сетевого кода.

Если ваш демон более тяжелый или чаще используется, вам, вероятно, лучше написать его автономно.Вы можете так же легко написать init.d сценарий и некоторые conf.d настройте его вместе с этим, и администратору не будет сложнее управлять им.Большинство языков программирования в наши дни имеют простые в использовании библиотеки сокетов, так что во многих случаях сетевой код может быть даже не таким уж сложным.

По своему опыту я обнаружил, что в наши дни мало кто из администраторов знаком с inetd.Большинство демонов просто предоставляют свой собственный сценарий инициализации.На самом деле, из нескольких сотен систем, которыми я управляю, я не могу вспомнить ни одной, которая вообще запускала бы что-либо через inetd.Это то, над чем стоит задуматься.

Другие советы

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

Редактировать:Лично я никогда не использую inetd и всегда предпочитаю писать серверные процессы как автономные демоны.

Я думаю, что еще одним фактором, который стоит учитывать при принятии решения об использовании inetd, является то, сколько памяти в среднем потребляет процесс, обрабатывающий запрос?Если это значение достаточно велико, то при высокой нагрузке вы рискуете исчерпать память (поскольку inetd разветвляется).Один и тот же сервер может быть реализован многопоточным способом или методом опроса с возможностью выбора, что, возможно, обеспечивает более высокую нагрузку / меньший объем памяти на одно соединение.

Какую альтернативную стратегию вы рассматриваете?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top