swoole之簡單入門和心跳檢測


  Swoole雖然是標准的PHP擴展,實際上與普通的擴展不同。普通的擴展只是提供一個庫函數。

而swoole擴展在運行后會接管PHP的控制權,進入事件循環。當IO事件發生后,swoole會自動回調指定的PHP函數。

  Swoole感覺大大提高了php的生命力,而且這是國人開發的(用C編寫的一個高性能)網絡框架。

  Swoole相對於傳統的php框架是有很大不同的。

環境依賴:

  • 僅支持 LinuxFreeBSDMacOS 三種操作系統
  • Windows平台,可使用CygWinWSL(Windows Subsystem for Linux)
  • Linux 內核版本 2.3.32 以上
  • gcc4.4 以上版本或者clang
  • 4.x版本起需要gcc-4.8或更高版本, 編譯失敗請先嘗試升級gcc

PHP版本依賴

  1.x 依賴於php5.3.10以上版本

  4.x依賴於php7以上版本

下面舉個簡單例子

服務端:

$serv = new Swoole\Server('0.0.0.0',9800,SWOOLE_SOCK_TCP);
$serv->on('Connect', function($server,$fd){
echo '有新連接進來了'.$fd.PHP_EOL;
// $server->send($fd,'歡迎來到榮華富貴大家庭');
});
$serv->on('Receive', function (swoole_server $server,$fd,$reactor_id,$data){
echo '收到消息'.$data;
//$server->send($fd,$data);
});
$serv->on('Close', function (){
echo '連接關閉了';
});
$serv->start();

客戶端:

$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9800, -1))
{
exit("connect failed. Error: {$client->errCode}\n");
}
//$client->send("hello world\n");
//echo $client->recv();
$client->close();

上面是簡單示例。接下來要知道為什么要心跳檢測。

比如說:一個客戶端一直占用着連接,沒有活動也沒有自己主動關閉,那這時候你就需要做一個心跳檢測,去檢測這個客戶端到底有沒有在做事情,

如果沒有的話那服務端就要主動關閉這個客戶端的連接,避免該客戶端一直占用着資源,又不做事情,要把需要的資源給需要的客戶端。這就是心跳

檢測的運用場景。

只需要簡單配置一下就好

案例:

服務端:

$serv = new Swoole\Server('0.0.0.0',9800,SWOOLE_SOCK_TCP);

$serv->set(array(
  
//心跳檢測,每三秒檢測一次,10秒沒活動就斷開
'heartbeat_idle_time'=>10,//連接最大的空閑時間
'heartbeat_check_interval'=>3 //服務器定時檢查

));

$serv->on('Connect', function($server,$fd){
echo '有新連接進來了'.$fd.PHP_EOL;
// $server->send($fd,'歡迎來到榮華富貴大家庭');
});
$serv->on('Receive', function (swoole_server $server,$fd,$reactor_id,$data){
echo '收到消息'.$data;
$server->send($fd,$data);
});
$serv->on('Close', function (){
echo '連接關閉了';
});
$serv->start();

客戶端和上面一樣就可以了

運行圖:

10秒之后:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM