socket_listen()忽略';积压工作';参数,然后如何设置连接限制


socket_listen() ignores 'backlog' parameter, how to set connections limit then?

来自手册:

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

见鬼,如果我自己还想限制连接呢?限制连接,如:

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

socket_select()结合使用不会很好地工作,因为函数仍然有传入连接,该服务器需要正确处理!接受连接>$max_clients并立即关闭它不是一种选择,所以……也许有人知道如何做到这一点?

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

  1. socket_accept()用于传入连接,socket_select()用于正确处理它,这样服务器就不会再麻烦它了
  2. 检查所需条件是否匹配,例如:连接限制、允许的地址或您的自定义令牌
  3. 如果出现问题,请socket_close()该特定连接,并将其从客户端阵列中删除(或您可能用于此目的的任何其他连接)

也许这会对某人有所帮助。