类别:Workerman / 日期:2019-12-02 / 浏览:191 / 评论:0

Gateway/Worker开发模子支撑服务端的心跳检测,可以定时向客户端发送运用层的心跳,可以实时检测到客户端极度掉线状况(掉电、突发网络故障等)。

注重:长衔接运用必需加心跳,不然衔接大概因为长时候未通信被路由节点强行断开。 (引荐进修: workerman教程)

心跳作用主要有两个:

1、客户端定时给服务端发送点数据,防备衔接因为长时候没有通信而被某些节点的防火墙封闭致使衔接断开的状况。

2、服务端可以经由过程心跳来推断客户端是不是在线,假如客户端在划定时候内没有发来任何数据,就以为客户端下线。如许可以检测到客户端因为极度状况(断电、断网等)下线的事宜。

心跳距离发起值:

发起客户端发送心跳距离小于60秒,比方55秒。

示例:

<?php
require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;

// 心跳距离55秒
define('HEARTBEAT_TIME', 55);

$worker = new Worker('text://0.0.0.0:1234');

$worker->onMessage = function($connection, $msg) {
    // 给connection暂时设置一个lastMessageTime属性,用来纪录上次收到音讯的时候
    $connection->lastMessageTime = time();
    // 别的营业逻辑...
};

// 历程启动后设置一个每秒运转一次的定时器
$worker->onWorkerStart = function($worker) {
    Timer::add(1, function()use($worker){
        $time_now = time();
        foreach($worker->connections as $connection) {
            // 有大概该connection还没收到过音讯,则lastMessageTime设置为当前时候
            if (empty($connection->lastMessageTime)) {
                $connection->lastMessageTime = $time_now;
                continue;
            }
            // 上次通信时候距离大于心跳距离,则以为客户端已下线,封闭衔接
            if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
                $connection->close();
            }
        }
    });
};

Worker::runAll();

以上设置为假如客户端凌驾55秒没有发送任何数据给服务端,则服务端以为客户端已掉线,服务端封闭衔接并触发onClose。

以上就是workerman心跳怎样用的细致内容,更多请关注ki4网别的相干文章!

打赏

感谢您的赞助~

打开支付宝扫一扫,即可进行扫码打赏哦~

版权声明 : 本文未使用任何知识共享协议授权,您可以任何形式自由转载或使用。

 可能感兴趣的文章