onMessage收不到客戶端發(fā)送的信息之后,onWorkerStart中的$connection為空無法觸發(fā)foreach一下的判斷,有沒有大佬能幫忙看看??!感謝您了
<?php
require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;
use Workerman\Lib\Timer;
?
// 心跳間隔55秒
define('HEARTBEAT_TIME', 55);
?
$worker = new Worker('http://0.0.0.0:8687');
?
$worker->onMessage = function($connection, $msg) {
? ? // 給connection臨時設(shè)置一個lastMessageTime屬性,用來記錄上次收到消息的時間
? ? $connection->lastMessageTime = time();
? ? // 其它業(yè)務(wù)邏輯...
? ?// echo $connection->id;
? ??
? ? echo "上線";
};
?
// 進(jìn)程啟動后設(shè)置一個每秒運行一次的定時器
$worker->onWorkerStart = function($worker) {
var_dump($worker->connections);
? ? Timer::add(1, function()use($worker){
? ? ? ? $time_now = time();
? ? ? ? echo "||".$time_now."||";? ?
? ? ? ?// var_dump($connection);
? ? ? ? foreach($worker->connections as $connection) {
? ? ? ? echo "標(biāo)志1";
? ? ? ? // var_dump($worker->connections);
? ? ? ? $jicheng = $connection;
? ? ? ? echo($jicheng ->id);
? ? ? ? ? ? // 有可能該connection還沒收到過消息,則lastMessageTime設(shè)置為當(dāng)前時間
? ? ? ? ? ? echo $jicheng->lastMessageTime;
? ? ? ? ? ? if (empty($jicheng->lastMessageTime)) {
? ? ? ? ? ? ? ? $jicheng->lastMessageTime = $time_now;
? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? }
? ? ? ? ? ? // 上次通訊時間間隔大于心跳間隔,則認(rèn)為客戶端已經(jīng)下線,關(guān)閉連接
? ? ? ? ? ? if ($time_now - $jicheng->lastMessageTime > HEARTBEAT_TIME) {
? ? ? ? ? ? ? ?// $connection->close();
? ? ? ? ? ? ? ? echo "下線";
? ? ? ? ? ? }
? ? ? ? }
? ? });
};
?
Worker::runAll();
1個回答
年代過于久遠(yuǎn),無法發(fā)表回答