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秒之后: