PHP stream 系列函数使用遇到的问题??

该问题已解决


server客户端流 持续写入,client 持续读取;但是只有等待 server 端停止对 客户端流 写入后才能,才能读取到数据,这是为什么(角色反过来也是一样的)??流(stream) 难道不能一边写入,一边读取??只能等待一边写入完成后,另一边才能读取??


完整代码:

server.php

$transport = 'tcp://';
$ip = '0.0.0.0';
$port = 9160;

$url = $transport . $ip . ':' . $port;

$socket = stream_socket_server($url , $errno, $errstr);

$res = stream_socket_accept($socket);

echo '客户端已连接' . PHP_EOL;

$d = 20;
$s_time = time();

// 写入数据
// fwrite($res , "server response\n");
// 发送消息到客户端
fwrite($res , "server response\n");

while (true)
{
    $e_time = time();

    if ($e_time - $s_time > $d) {
        break;
    }

    $msg = fgets($res);

    if (!empty($msg)) {
        echo '接收到的来自客户端的消息:' . $msg . PHP_EOL;
    }
}

// 关闭客户端链接
fclose($res);
// 关闭 socket 监听
fclose($socket);

client.php

$transport = 'tcp://';
$ip = '127.0.0.1';
$port = 9160;

$url = $transport . $ip . ':' . $port;

$res = stream_socket_client($url, $errno, $errstr, 30);

$d = 20;
$s_time = time();

fwrite($res , "client data\n");

while (true)
{
    $e_time = time();

    if ($e_time - $s_time > $d) {
        break;
    }

    $msg = fgets($res);

    if (!empty($msg)) {
        echo '接收到的来自客户端的消息:' . $msg . PHP_EOL;
    }
}

fclose($res);
泛舟湖上清波郎朗
浏览 377回答 1
1回答

慕盖茨4494581

该问题已经解决。 在没有设置 stream_set_blocking($resource , 0) 之前,流是阻塞模式,所以会阻塞在 fgets 步骤。
打开App,查看更多内容
随时随地看视频慕课网APP