swoolel代碼演示 - IO模式之阻塞模式

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)

證明第二個客戶端是需要等待再招待,明顯是阻塞模式

最後再來查看服務端的變化,如下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章