为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
泛舟湖上清波郎朗 2019-03-08 06:29:25
该问题已解决 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);
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

该问题已经解决。

在没有设置 stream_set_blocking($resource , 0) 之前,流是阻塞模式,所以会阻塞在 fgets 步骤。

查看完整回答
反对 回复 2019-03-18
  • 1 回答
  • 0 关注
  • 376 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信