[PHP] stream_set_blocking非阻塞模式影响fgets fread函数

本文探讨了在PHP中如何通过设置socket为非阻塞模式,使得fread或fgets函数无需等待输入即可立即返回结果。在客户端未输入时,通常程序会在此处阻塞,但非阻塞模式下,程序会继续执行,这对于提高服务器响应速度和处理效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当设置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);
} 

 

 客户端连接上后没有输入直接会执行到这一步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值