2013-12-12 24 views
1

從手冊:socket_listen()忽略'backlog'參數,如何設置連接限制呢?

傳遞給積壓參數的最大數量在很大程度上取決於 底層平臺。在Linux上,它被無聲地截斷爲 SOMAXCONN。在win32上,如果通過SOMAXCONN,負責套接字的底層服務提供商 將把積壓設置爲最大合理值 。沒有標準規定來找出該平臺上的實際積壓值 。

地獄,如果我還想限制自己的連接呢?像限制連接:

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

將不能很好地結合socket_select()工作,因爲功能還是得到了傳入的連接,該服務器需要妥善處理!接受連接>$max_clients並立即關閉不是一個選項,所以......也許有人知道如何做到這一點?

回答

1

從另一篇文章我已經理解,這實際上是可以接受的,以允許連接並關閉它,如果它不符合要求的條件。因此,對於多連接插座服務器方案將是:

  1. socket_accept()傳入連接,socket_select()妥善處理它,服務器將不打擾它了;
  2. 檢查所需條件是否匹配,如:連接限制,允許的地址或您的自定義標記;
  3. 如果有什麼不對,socket_close()這個特定的連接,並從客戶端陣列(或其他任何你可能用於這種目的)中刪除它。

也許它會幫助別人。