【问题标题】:socket_listen() ignores 'backlog' parameter, how to set connections limit then?socket_listen() 忽略 'backlog' 参数,那么如何设置连接限制?
【发布时间】:2013-12-12 21:02:06
【问题描述】:

来自手册:

传递给 backlog 参数的最大数量高度取决于 底层平台。在 Linux 上,它被默默地截断为 SOMAXCONN.在win32上,如果通过SOMAXCONN,底层服务 负责套接字的提供者将积压设置为最大值 合理的价值。没有标准规定可以找出 此平台上的实际积压值。

该死,如果我仍然想自己限制连接怎么办?限制连接,例如:

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

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

【问题讨论】:

    标签: php sockets


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多