该问题已解决
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 回答
![?](http://img1.sycdn.imooc.com/533e4d5b0001d57502200203-100-100.jpg)
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
该问题已经解决。
在没有设置 stream_set_blocking($resource , 0)
之前,流是阻塞模式,所以会阻塞在 fgets
步骤。
- 1 回答
- 0 关注
- 376 浏览
添加回答
举报
0/150
提交
取消