1,建立服務端代碼-stream_socket_server.php
<?php
/*
* 創建socket服務端
* 參考 :https://php.golaravel.com/function.stream-socket-server.html
*/
require __DIR__."/../../vendor/autoload.php";
$host ="tcp://0.0.0.0:9000";
//創建socket服務
$socket = stream_socket_server($host);
//連接並監聽,多個客戶端,循環監聽
debug("監聽……");
while($conn = stream_socket_accept($socket)){
//讀取客戶端發送的信息
debug("有新的連接進來……".date("H:i:s"));
sleep(3);
//打印客戶端發送來的信息
var_dump(fread($conn,65535));
//向客戶端發送信息
fwrite($conn,"服務器發來信息".date("H:i:s"));
//關閉連接
fclose($conn);
}
fclose($socket);
?>
2,創建客戶端的代碼-stream_socket_client.php
<?php
/*
* 創建socket服務端
* 參考 :https://php.golaravel.com/function.stream-socket-server.html
*/
$host ="tcp://0.0.0.0:9000";
$new = time();
//創建socket服務
$socket = stream_socket_client($host);
fwrite($socket,'客戶端發來的信息');
var_dump(fread($socket,65535));
fclose($socket);
echo '耗時:'.(time()-$new)."\n";
?>
先來運動服務端如下
同時打開二個客戶端,先後運行,注意查看相應的運行時間
查看到第一個客戶端運行需要3秒,第二個客戶端需要4秒,注意服務端sleep(3)
證明第二個客戶端是需要等待再招待,明顯是阻塞模式
最後再來查看服務端的變化,如下