Swoole
雖然是標準的PHP擴展,實際上與普通的擴展不一樣。普通的擴展只是提供一個庫函數。php
而swoole擴展在運行後會接管PHP的控制權,進入事件循環。當IO事件發生後,swoole會自動回調指定的PHP
函數。react
Swoole感受大大提升了php的生命力,並且這是國人開發的(用C編寫的一個高性能)網絡框架。php框架
Swoole相對於傳統的php框架是有很大不一樣的。服務器
環境依賴:swoole
- 僅支持
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以上版本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秒以後: