Heim > Artikel > PHP-Framework > So verwenden Sie den Worker-Heartbeat
Das Gateway/Worker-Entwicklungsmodell unterstützt die serverseitige Heartbeat-Erkennung, die regelmäßig Heartbeats auf Anwendungsebene an den Client senden und extreme Client-Verbindungsunterbrechungen (Stromausfälle) umgehend erkennen kann. , plötzlicher Netzwerkausfall usw.).
Hinweis: Anwendungen mit langen Verbindungen müssen einen Heartbeat hinzufügen, andernfalls kann die Verbindung vom Routing-Knoten aufgrund einer langen Zeit ohne Kommunikation zwangsweise getrennt werden. (Empfohlenes Lernen: Workerman-Tutorial )
Der Heartbeat hat zwei Hauptfunktionen:
1 Der Client sendet regelmäßig Punktdaten an den Server. Verhindern Sie, dass die Verbindung durch die Firewall einiger Knoten geschlossen wird, weil über einen längeren Zeitraum keine Kommunikation erfolgt, was dazu führt, dass die Verbindung getrennt wird.
2. Der Server kann durch Heartbeat feststellen, ob der Client online ist. Wenn der Client innerhalb der angegebenen Zeit keine Daten sendet, wird davon ausgegangen, dass der Client offline ist. Dadurch können Ereignisse erkannt werden, bei denen der Client aufgrund extremer Umstände (Stromausfall, Netzwerkunterbrechung usw.) offline geht.
Empfohlener Heartbeat-Intervallwert:
Es wird empfohlen, dass der Client ein Heartbeat-Intervall von weniger als 60 Sekunden sendet, z. B. 55 Sekunden.
Beispiel:
<?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();
Die obige Konfiguration besagt, dass der Server denkt, dass der Client denkt, wenn der Client länger als 55 Sekunden keine Daten an den Server sendet war offline. Schließen Sie die Verbindung und lösen Sie onClose aus.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Worker-Heartbeat. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!