当前位置:Gxlcms > PHP教程 > stream_select怎么样判断socket连接和断开?

stream_select怎么样判断socket连接和断开?

时间:2021-07-01 10:21:17 帮助过:4人阅读

这是php网站上关于stream_select 的例子
http://php.com/manual/en/function.stream-socket-server.php

程序是从遍历连接的客户端是不是serversocket来判断连接, 遍历每个客户端都fread来读,根据读的结果是FALSE还是0判断是不是断开连接了,但是上面的程序一运行,cpu就上升,然后机器就卡住了,是不是这种判断连接有断开的方式有问题?

回复内容:

这是php网站上关于stream_select 的例子
http://php.com/manual/en/function.stream-socket-server.php

程序是从遍历连接的客户端是不是serversocket来判断连接, 遍历每个客户端都fread来读,根据读的结果是FALSE还是0判断是不是断开连接了,但是上面的程序一运行,cpu就上升,然后机器就卡住了,是不是这种判断连接有断开的方式有问题?

运行这个例子,报了一堆错误,你没报错?
我修改了一下

$master = array();
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
$master[] = $socket;
$read = $master;
while (1) {
    $read = $master;
    $_w = $_e = null;
    $mod_fd = stream_select($read, $_w, $_e, 0);

    foreach ($read as $rstream) {
        $conn = stream_socket_accept($socket);
        if ($conn) {
            fwrite($conn, "Hello! The time is " . date("n/j/Y g:i a") . "\n");
            $sock_data = fread($conn, 1024);
//            var_dump($sock_data);
            if ($sock_data === 0) {

            } elseif ($sock_data === false) {
                echo "Something bad happened" . PHP_EOL;
            } else {
                fwrite($conn, "You have sent :[" . $sock_data . "]\n");
            }
            fclose($conn);
        }
    }
}

人气教程排行