stream_set_blocking函数可以将资源流设置为阻塞模式或者非阻塞模式,主要影响的函数分别是fgets,fread,其他的手册没有说。

在socket编程中,如果一个socket连接上了,但是不发送数据,此时使用fread或者fgets去读取数据,由于socket句柄是有效的,但是获取不到数据,fread/fgets就会阻塞等待卡在那里,一直等到超时才继续向下执行。

看下面的阻塞等待demo:

服务器:<?php

$socket = stream_socket_server('tcp://127.0.0.1:8888', $errno, $errstr);

while ($conn = stream_socket_accept($socket))

{

//服务端知道客户端连接了,就是不给你发消息,先睡一会儿吧

sleep(1000);

}

fclose($socket);

客户端:<?php

$socket = stream_socket_client('tcp://127.0.0.1:8888', $errorno, $errstr);

echo 'start';

echo fread($socket, 128);

echo 'success';

fclose($socket);

由于服务器端不发送任何东西,fread一直卡住,阻塞等待,此时程序只输出start,一直到超时后才输出success。另外需要注意的是阻塞等待过程中如果对应的socket被关闭了也不会继续阻塞,例如上面的服务器端被关闭了。

再看下面的非阻塞等待demo:

客户端:<?php

$socket = stream_socket_client('tcp://127.0.0.1:8888', $errorno, $errstr);

stream_set_blocking($socket,false);

echo 'start';

echo fread($socket, 128);

echo 'success';

fclose($socket);

非阻塞等待的比较简单,我去获取数据,没有就算了直接返回,根本不去等你给我发。

php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...相关推荐

  1. 非阻塞 php,PHP异步非阻塞之路

    需求 一个简单的需求,提交大量数据到远程服务器,此时并不需要等待返回. 另一个需求,获取API数据,同时查询数据库,并行处理,加快响应速度. 配置问题 set_time_limit ignore_us ...

  2. 设置非阻塞socket收发数据

    非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接.包括的函数有:read, readv, recv, recvfrom, recvmsg, write, wri ...

  3. IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT

    非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:        基本概念: 阻塞IO:: socket 的阻塞模 ...

  4. 非阻塞recvfrom的设置

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 我想用U ...

  5. Linux 使用fcntl c_cc[VMIN] c_cc[CTIME]设置串口阻塞与非阻塞读取数据

    一.概述 Linux串口非常灵活,可以根据需要配置成标准串口和自定义串口模式,就Linux 串口读取数据来说,有有两种主要方式:阻塞与非阻塞. 阻塞:一直等待数据,直到退出条件成立: 非阻塞:及时返回 ...

  6. python复制文件夹不阻塞_11.python并发入门(part14阻塞I/O与非阻塞I/O,以及引入I/O多路复用)...

    一.初步了解什么是I/O模型. 1.回顾,用户态与内核态. 操作系统位于应用程序和硬件之间,本质上是一个软件,它由内核以及系统调用组成. 内核:用于运行于内核态,主要作用是管理硬件资源. 系统调用:运 ...

  7. 阻塞式IO和非阻塞式IO

    什么是阻塞式IO,什么是非阻塞式IO?区分他们有何用? 阻塞式IO:IO即input/output,阻塞式IO指的是"一旦输入/输出工作没有完成,则程序阻塞,直到输入/输出工作完成" ...

  8. 同步I/O、异步I/O、阻塞I/0、非阻塞I/O、五种I/O模型、高性能网络模型

    10.I/O相关概念 https://www.cnblogs.com/xiaoxi/p/6525396.html 10.1.同步和异步 ​ 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须 ...

  9. java 非阻塞_Java之NIO(非阻塞IO)

    [1]NIO的与IO的区别: 总的来说java 中的IO 和NIO的区别主要有3点: 1)IO是面向流的,NIO是面向缓冲的: 2)IO是阻塞的,NIO是非阻塞的: 3)IO是单线程的,NIO 是通过 ...

最新文章

  1. k-d tree算法的研究
  2. 快速创建 IEqualityComparer 实例:改进
  3. UVA 514——Rails
  4. Java中Web程序修改配置文件不重启服务器的方法
  5. 显卡风扇不转电脑黑屏_隔壁妹子电脑坏了怎么办,简单易懂电脑维修方法与技巧收藏备用...
  6. mongodb删除文档
  7. 问题-Delphi7中JSON遍历节点不支持使用IN处理方法?
  8. 长大了,烦恼就像是滔滔江水
  9. Android.mk的一些FAQ
  10. 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
  11. linux中 qt安装教程视频,Linux 下QT安装教程
  12. 在MonthCalendar控件中选中日期
  13. ACL2021_Enhancing Entity Boundary Detection for Better Chinese Named Entity Recognition
  14. 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全
  15. Windows平台快速安装MongoDB和Robo 3T
  16. 富景中国在港交所招股书失效,富景农业冲刺香港上市又一次折翼
  17. html5白鹭引擎,白鹭开发者中心
  18. hostapd对WIFI 热点(AP)的配置方法
  19. 视频剪辑怎么自学?其实剪辑很简单
  20. Linux之下载速度慢解决办法

热门文章

  1. 17原理图查找连接的管脚接口_第三节 主板原理图之标识的作用
  2. 将csv文件导入到mysql数据库
  3. 微服务架构下分布式事务解决方案——阿里GTS
  4. Python代码发送post请求接口测试--转载
  5. 欧几里得及扩展欧几里得算法
  6. DirectInput:poll轮询理解
  7. Linux--轻松定义自己的RPM/DEB软件包
  8. Windows远程Linux/Ubuntu桌面
  9. RTEMS移植USB无线网卡的设想
  10. 从JVM指令层面看try-catch-finally返回值问题