[PHP] stream_set_blocking非阻塞模式影響fgets fread函數

當設置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

相關文章
相關標籤/搜索