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

当设置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);
} 
复制代码

 

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

posted @   唯一客服系统开发笔记  阅读(933)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-12-05 [Linux] LVS虚拟服务器四层负载均衡
点击右上角即可分享
微信分享提示
1
chat with us