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

 

posted @ 2019-04-15 20:11  未入门的码农  阅读(2634)  评论(0编辑  收藏  举报