本文已以大家都熟悉的 EchoServer 介绍如何限制服务器的并发连接数。
本文的代码见 http://code.google.com/p/muduo/source/browse/trunk/examples/maxconnection/
《Muduo 网络 编程示例 系列》计划中的第六篇文章原本是“用于测试两台机器的带宽的 pingpong 程序”, pingpong 协议的程序已经在《muduo 与 boost asio 吞吐量对比》和《muduo 与 libevent2 吞吐量对 比》两篇文章中介绍过了,所以我改为写另外一个有点意思的主题。
这篇文章中的“并发连接 数”是指一个 server program 能同时支持的客户端连接数,连接系由客户端主动发起,服务端被动接 受(accept)连接。(如果要限制应用程序主动发起的连接,则问题要简单得多,毕竟主动权和决定权都 在程序本身。)
为什么要限制并发连接数?
一方面,我们不希望服务程序超载,另一方 面,更因为 file descriptor 是稀缺资源,如果出现 file descriptor 耗尽,很棘手(跟 “malloc 失败/new() 抛出 std::bad_alloc”差不多同样棘手)。
我在《分布式系统的工程化开发方法 》一文中曾谈到 libev 作者建议的一种应对“accept()ing 时 file descriptor 耗尽”的办法。
时间: 2024-09-13 21:37:36