[PHP] stream_set_blocking非阻塞模式影响fgets fread函数
程序员文章站
2022-06-15 17:40:52
当设置socket为非阻塞时,fread或者fgets函数会立即返回结果,而不需要等待有输入,测试过程可以使用vscode的debug模式来进行当不设置这一项时,如果客户端没有输入会一直阻塞在这里等待客户端的输入,当加上这个设置后就不会在这等着了 测试代码 客户端连接上后没有输入直接会执行到这一步 ......
当设置socket为非阻塞时,fread或者fgets函数会立即返回结果,而不需要等待有输入,测试过程可以使用vscode的debug模式来进行
当不设置这一项时,如果客户端没有输入会一直阻塞在这里等待客户端的输入,当加上这个设置后就不会在这等着了
测试代码
<?php $main_socket = stream_socket_server("tcp://0.0.0.0:8888", $error_code, $error_msg) or die('create server failed'); while(1) { set_error_handler(function(){}); $new_socket = stream_socket_accept($main_socket, 5, $remote_address); restore_error_handler(); if(!$new_socket) continue; //屏蔽或开启本行代码进行调试 stream_set_blocking($new_socket, 0); $request = fread($new_socket, 8192); var_dump($request); }
客户端连接上后没有输入直接会执行到这一步