socket_listen()忽略'backlog'参数,如何设置连接限制呢?

时间:2013-12-12 21:02:06

标签: php sockets

从手册:

  

传递给backlog参数的最大数量很大程度上取决于   底层平台。在Linux上,它被默默地截断为   SOMAXCONN。在win32上,如果传递了底层服务SOMAXCONN   负责套接字的提供程序会将积压设置为最大值   合理的价值。找不到标准条款   此平台上的实际积压值。

天啊,如果我还想自己限制连接怎么办?限制连接,如:

if( count($client_sockets) < $max_clients ) {
    //accept connection
} else {
    echo "Limit reached!";
}

socket_select()结合使用效果不佳,因为函数仍然有传入连接,服务器需要正确处理!接受连接&gt; $max_clients而不是立即关闭它不是一种选择,所以...也许有人知道该怎么做?

1 个答案:

答案 0 :(得分:1)

从另一篇文章中我了解到,如果它与所需条件不匹配,那么允许连接实际上是可以接受的,而不是关闭它。所以多连接套接字服务器的方案是:

  1. socket_accept()用于传入连接,socket_select()正确处理,因此服务器不再为此烦恼;
  2. 检查所需条件是否匹配,例如:连接限制,允许的地址或自定义令牌;
  3. 如果出现问题,socket_close()此特定连接并将其从客户端数组中删除(或者您可能用于此类目的的任何其他内容)。
  4. 也许它会帮助别人。