php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...
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()...相关推荐
- 非阻塞 php,PHP异步非阻塞之路
需求 一个简单的需求,提交大量数据到远程服务器,此时并不需要等待返回. 另一个需求,获取API数据,同时查询数据库,并行处理,加快响应速度. 配置问题 set_time_limit ignore_us ...
- 设置非阻塞socket收发数据
非阻塞式I/O包括非阻塞输入操作,非阻塞输出操作,非阻塞接收外来连接,非阻塞发起外出连接.包括的函数有:read, readv, recv, recvfrom, recvmsg, write, wri ...
- IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO:: socket 的阻塞模 ...
- 非阻塞recvfrom的设置
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 我想用U ...
- Linux 使用fcntl c_cc[VMIN] c_cc[CTIME]设置串口阻塞与非阻塞读取数据
一.概述 Linux串口非常灵活,可以根据需要配置成标准串口和自定义串口模式,就Linux 串口读取数据来说,有有两种主要方式:阻塞与非阻塞. 阻塞:一直等待数据,直到退出条件成立: 非阻塞:及时返回 ...
- python复制文件夹不阻塞_11.python并发入门(part14阻塞I/O与非阻塞I/O,以及引入I/O多路复用)...
一.初步了解什么是I/O模型. 1.回顾,用户态与内核态. 操作系统位于应用程序和硬件之间,本质上是一个软件,它由内核以及系统调用组成. 内核:用于运行于内核态,主要作用是管理硬件资源. 系统调用:运 ...
- 阻塞式IO和非阻塞式IO
什么是阻塞式IO,什么是非阻塞式IO?区分他们有何用? 阻塞式IO:IO即input/output,阻塞式IO指的是"一旦输入/输出工作没有完成,则程序阻塞,直到输入/输出工作完成" ...
- 同步I/O、异步I/O、阻塞I/0、非阻塞I/O、五种I/O模型、高性能网络模型
10.I/O相关概念 https://www.cnblogs.com/xiaoxi/p/6525396.html 10.1.同步和异步 同步就是:如果有多个任务或者事件要发生,这些任务或者事件必须 ...
- java 非阻塞_Java之NIO(非阻塞IO)
[1]NIO的与IO的区别: 总的来说java 中的IO 和NIO的区别主要有3点: 1)IO是面向流的,NIO是面向缓冲的: 2)IO是阻塞的,NIO是非阻塞的: 3)IO是单线程的,NIO 是通过 ...
最新文章
- k-d tree算法的研究
- 快速创建 IEqualityComparer 实例:改进
- UVA 514——Rails
- Java中Web程序修改配置文件不重启服务器的方法
- 显卡风扇不转电脑黑屏_隔壁妹子电脑坏了怎么办,简单易懂电脑维修方法与技巧收藏备用...
- mongodb删除文档
- 问题-Delphi7中JSON遍历节点不支持使用IN处理方法?
- 长大了,烦恼就像是滔滔江水
- Android.mk的一些FAQ
- 一串数字中有两个只出现一次的数字其余都是成对相同,求这两个数
- linux中 qt安装教程视频,Linux 下QT安装教程
- 在MonthCalendar控件中选中日期
- ACL2021_Enhancing Entity Boundary Detection for Better Chinese Named Entity Recognition
- 软件安全漏洞测试报告_现实生活中的软件安全漏洞以及如何确保安全
- Windows平台快速安装MongoDB和Robo 3T
- 富景中国在港交所招股书失效,富景农业冲刺香港上市又一次折翼
- html5白鹭引擎,白鹭开发者中心
- hostapd对WIFI 热点(AP)的配置方法
- 视频剪辑怎么自学?其实剪辑很简单
- Linux之下载速度慢解决办法