对于inetd还是不对inetd ...什么时候应该使用inetd作为我的网络服务器程序?

时间:2008-12-24 05:49:05

标签: network-programming inetd

任何人都可以提供一套简明的实际考虑因素,这些因素可以决定是否使用inetd来管理充当网络服务器的程序吗?

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

这个问题是基于我看到的一个实现,它使用由inetd管理的控制程序来启动一个网络监听器,然后永远运行并承担持续和繁重的负载。它似乎不适合教科书inetd使用情况(按需,不经常使用,轻量级),让我对更一般的问题感兴趣。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您正在考虑采用何种替代策略?

当操作系统在适当的运行级别启动时,

inetd是确保服务器启动的好方法。即使您将服务器设计为具有其他管理机制,inetd仍然可以非常简单地包装所有命令。毕竟它只是shell脚本。