程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php socket 處理不過來數據流,該如何避免(好像是阻塞了)

php socket 處理不過來數據流,該如何避免(好像是阻塞了)

編輯:關於PHP編程

php socket 處理不過來數據流,該如何避免(好像是阻塞了)


php socket 處理不過來數據流,該如何處理(好像是阻塞了)
需求:php接受一個硬件往8888端口上發送數據,如果收到後,應socket_send函數返回“\xFA\x01\x01\xFF\xAA\xAA\x00\x01\x00\x00\x00\x00\x00\x01”,硬件再接收到socket_send發送的數據後,會“滴”一聲,但是問題出現了,一個硬件還好,但是當多個硬件同時連接並同時發送數據時,會出現硬件不能連續的回應(即發出“滴”的聲音),也就是說能連續發出“滴”聲後,便不在響了,大概幾秒鐘後,又開始響應了,過一會又不行了,幾個連接上的硬件都是這樣,我已經用了非阻塞模式,還是會這樣,求解決方法,下面貼出代碼

PHP code
= $MAX_USERS)
                {
                    $reject = "Server full. Try again later.\n";                   
                }                
                //將當前客戶端連接放如socket_select選擇
                $connections[$i] = $newconn;
                //輸入的連接資源緩存容器
                $writefds[$i] = $newconn;               
                //連接不正常
                if ($reject)
                {                  
                    $close[$i] = true;
                }
                else
                {
                    echo "Welcome to the PHP Chat Server!\n";                  
                }               
                //初始化當前連接讀取內容的緩存容器
                $input[$i] = "";
                continue;
            }
            //客戶端連接
            $i = (int)$rfd;
            //讀取
            $tmp = @socket_read($rfd, 14, PHP_NORMAL_READ);
            if (!$tmp)
            {
                //讀取不到內容              
                print "connection closed on socket $i\n";
                close($i);
                continue;
            }
            $input[$i] .= $tmp;
            $tmp = substr($input[$i], -1);
            /*if ($tmp != "\r" && $tmp != "\n")
            {
                // no end of line, more data coming
                continue;
            }*/
            $line = trim($input[$i]);
            $input[$i] = "";
            echo 'Client >>'.$line."\r\n";
            
            
            
            
            socket_getpeername($connections[$i],&$remoteIP,&$remotePort);
echo $remoteIP."\r\n";
echo $remotePort."\r\n";
//$data=str_split($buffer);
//print_r($data);
$str="\xFA\x01\x01\xFF\xAA\xAA\x00\x01\x00\x00\x00\x00\x00\x01";
 socket_send($connections[$i],$str,strlen($str),0);
            
            
            
            
            
            
        }
        foreach ($writefds as $wfd)
        {
            $i = (int)$wfd;
            $w = socket_write($wfd, "hello");
        }
    }   
}

function close($i)
{
    global $connections, $input, $close;
    socket_shutdown($connections[$i]);
    socket_close($connections[$i]);
    unset($connections[$i]);
    unset($input[$i]);   
    unset($close[$i]);
}
?>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved