swoole之簡單入門和心跳檢測

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

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

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

  Swoole相對於傳統的php框架是有很大不一樣的。服務器

環境依賴:swoole

  • 僅支持 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以上版本php7

  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秒以後:

相關文章
相關標籤/搜索