當設置socket爲非阻塞時,fread或者fgets函數會當即返回結果,而不須要等待有輸入,測試過程可使用vscode的debug模式來進行
當不設置這一項時,若是客戶端沒有輸入會一直阻塞在這裏等待客戶端的輸入,當加上這個設置後就不會在這等着了php
測試代碼socket
<?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); }
客戶端鏈接上後沒有輸入直接會執行到這一步tcp