5

谁能给出一组简明的现实世界考虑因素,以推动选择是否使用 inetd 来管理充当网络服务器的程序?

(如果使用inetd,我认为它改变了程序中围绕网络代码的要求,所以我认为它肯定是与编程相关的,而不是一般的IT)

这个问题是基于我看到的一个实现,它使用由inetd 管理的控制程序来启动一个网络侦听器,然后它会永远运行并承受恒定和沉重的负载。它似乎不太适合教科书的 inetd 使用配置文件(按需、不经常使用、轻量级),这让我对更一般的问题感兴趣。

4

5 回答 5

3

这取决于您的服务的使用模式。如果您的守护程序的启动时间很短,并且您希望它不经常使用,那么 int 可能是一个不错的选择。它减少甚至消除了编写任何额外网络代码的需要。

如果您的守护程序更重量级或更频繁使用,您最好单独编写它。您可以轻松地编写init.d脚本和一些conf.d配置来配合它,管理员管理起来也不会困难。如今,大多数编程语言都具有易于使用的套接字库,因此在许多情况下,网络代码甚至可能没有那么困难。

根据我的经验,我发现现在很少有管理员熟悉 inetd。大多数守护进程只提供自己的初始化脚本。事实上,在我管理的几百个系统中,我根本想不出一个可以通过 inetd 启动任何东西的系统。这是值得考虑的事情。

于 2008-12-24T06:38:39.763 回答
2

从操作的角度来看,挂钩 inetd 将使您的服务更易于管理,因为 inetd 允许系统管理员几乎控制所有与您的程序进行网络通信的方式。但是,它需要您对程序进行一些代码更改。此外,它可能不如让您的程序从一开始就作为守护程序运行那么有效。

编辑:我个人从不使用 inetd 并且总是选择将服务器进程编写为独立的守护进程。

于 2008-12-24T05:58:08.957 回答
2

我认为在决定使用 inetd 时另一个值得考虑的因素是处理请求的进程平均消耗多少内存?如果这相当高,那么在高负载下,您可能会耗尽内存(因为 inetd 分叉)。同一个服务器可能以多线程或选择轮询方式实现,可能允许每个连接更高的负载/更少的内存。

于 2008-12-24T06:40:06.830 回答
0

您正在考虑什么替代策略?

inetd 是确保您的服务器在操作系统以适当的运行级别启动时启动的好方法。即使您确实将服务器设计为具有其他一些管理机制,inetd 仍然可以非常简单地包装所有命令。毕竟只是shell脚本。

于 2008-12-24T05:54:43.940 回答
0

您可以使用 inetd 为通过 stdin/stdout 运行的简单程序提供 TCP/UDP 功能。

Without inetd, your program will need to manage a slew of concerns, including network interfaces, sockets, forking, resource limits, etc.

于 2021-08-21T04:06:02.603 回答