Swoole
雖然是標准的PHP擴展,實際上與普通的擴展不同。普通的擴展只是提供一個庫函數。
而swoole擴展在運行后會接管PHP的控制權,進入事件循環。當IO事件發生后,swoole會自動回調指定的PHP
函數。
Swoole感覺大大提高了php的生命力,而且這是國人開發的(用C編寫的一個高性能)網絡框架。
Swoole相對於傳統的php框架是有很大不同的。
環境依賴:
- 僅支持
Linux
、FreeBSD
、MacOS
三種操作系統 - 在
Windows
平台,可使用CygWin
或WSL(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秒之后: