Para o inetd ou não inetd ... quando devo usar inetd para o meu programa servidor de rede?

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

  •  23-08-2019
  •  | 
  •  

Pergunta

Alguém pode dar um conjunto conciso de considerações do mundo real que iria conduzir a escolha de se deve ou não usar inetd para gerenciar um programa que atua como um servidor de rede?

(Se inetd é usado, acho que altera os requisitos em torno de redes código no programa, então eu acho que é definitivamente programação-relacionados e não de TI geral)

A questão é baseado em torno de uma implementação que eu vi que usa um programa de controle gerenciado por inetd para iniciar um ouvinte de rede que, em seguida, corre para sempre e leva constante e carga pesada. Ele não parece ser um bom ajuste com o perfil de utilização livro inetd (on-demand, pouco usado, leve) e me interessou na questão mais geral.

Foi útil?

Solução

Depende do padrão de uso para o seu serviço. Se o tempo de inicialização para o seu daemon é baixa, e você espera que ele seja usado com pouca freqüência, em seguida, inted pode ser um bom ajuste. Ele reduz ou mesmo elimina a necessidade de escrever qualquer código de rede adicional.

Se o seu daemon é mais pesado ou mais frequentemente usado, você é provavelmente melhor fora de escrevê-lo independente. Você pode facilmente escrever um script init.d e alguma configuração conf.d para ir com ele e ele não é mais difícil será para um administrador para gerenciar. A maioria das linguagens de programação nos dias de hoje têm fácil de bibliotecas uso de soquete assim, em muitos casos, o código de rede não pode mesmo ser tão difícil.

Eu encontrei na minha experiência que poucos administradores nos dias de hoje estão familiarizados com inetd. A maioria dos daemons apenas fornecer o seu próprio script de inicialização. Na verdade, das poucas centenas de sistemas que eu conseguir eu não consigo pensar em uma única que lançamentos qualquer coisa através de inetd em tudo. Isso é algo que vale a pena considerar.

Outras dicas

enganchando em inetd vai fazer o seu serviço um pouco mais fácil de gerir do ponto de vista operacional como inetd permite que um administrador de sistema para controlar praticamente todos como comunicações de rede com o seu programa acontece. No entanto, será necessário que você faça algumas alterações de código para seu programa. Além disso, ele pode não ser tão eficiente quanto apenas fazendo o seu programa executado como um daemon para começar.

EDIT:. Eu, pessoalmente, nunca use inetd e sempre opt para processos do servidor de gravação como daemons individuais

Eu acho que uma outra pena fator considerando ao decidir utilização inetd é quanta memória o processo de lidar com os consome pedido, em média? Se isso é bastante alta, então sob alta carga corre o risco de ficar sem memória (desde garfos inetd). O mesmo servidor pode ser implementável em um de vários segmentos ou selecione-poll maneira possivelmente permitindo maior carga / menos memória por conexão.

Que estratégia alternativa que você está considerando?

inetd é uma boa maneira de garantir o seu servidor começa quando as botas OS no nível de execução apropriado. Mesmo se você projetar seu servidor para ter algum outro mecanismo de gestão, inetd ainda poderia envolver todos os comandos muito simplesmente. É apenas scripts shell depois de tudo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top