限制最大并发连接数

"当服务端使用Reactor模式处理并发连接时,可能会遇到accept()返回EMFILE错误,即文件描述符耗尽。为解决这个问题,可以限制最大并发连接数,并在超出限制时关闭新连接。另一种方法是预先准备一个空闲的文件描述符,如"/dev/null",在文件描述符耗尽时释放并重新accept(),但此方法不线程安全。此外,通过监控活动连接数来限制并发,防止资源耗尽。"
摘要由CSDN通过智能技术生成

限制最大并发连接数

应对accept()时文件描述符file descriptor耗尽的办法

  • 服务端用Reactor模式处理并发连接
    • 在某个端口listen连接socketFd = accept(listenFd)
    • epoll电平触发,如果有新连接就到达返回
    • accept()来活得新连接的socketfd
  • 假如accept()返回错误EMFILE该怎么办
    • 进程的文件描述符用完,无法创建socketfd
    • 由于无法拿到socketfd,也就无法close()
    • 在下次epoll_wait()时会立刻返回,因为新连接还在那里,listenfd还是可读的
    • 程序陷入busy loop
  • 应对的方法
    • 准备一个空闲的文件描述符,nullfd = open("/dev/null")
      • close(nullfd)获得文件描述符空间,然后acceptclose(socketFd),然后再nullfd = open("/dev/null"),这个方法不是线程安全的

限制并发连接数

增加一个int的成员,表示当前的活动连接数,如果超过最大的允许数,则关闭连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值