PHP `Non-Blocking Sockets` (`stream_set_blocking`) 与 `select()`/`poll()`/`epoll()`

各位观众,大家好!我是今天的主讲人,江湖人称“代码界的老司机”,今天咱们不飙车,聊聊PHP里那些让人又爱又恨的“非阻塞Sockets”。 咱们先来热热身,想象一下,你是一个饭馆老板,客人(请求)来了,你得招呼,还得让后厨(服务器)做菜。如果每个客人你都死守着,等他吃完再招呼下一个,那得饿死多少人? 这就是阻塞模式,效率低下,简直要破产! 所以,聪明的饭馆老板会怎么做? 没错,就是非阻塞模式! 招呼完客人,记下他的桌号(文件描述符),就去招呼下一个。后厨做好菜,再根据桌号送过去。 在PHP的世界里,stream_set_blocking就是控制“招呼客人”方式的开关,而select()、poll()、epoll()则是你用来监控“后厨上菜”情况的眼睛。 一、stream_set_blocking: 打开非阻塞的大门 stream_set_blocking函数,顾名思义,就是用来设置stream(流)的阻塞模式的。在Socket编程中,这个stream通常就是你的Socket资源。 <?php // 创建一个Socket $socket = socket_create(AF_INET …