1 定時是有執(zhí)行的
2 是邏輯代碼問題,定時器不能直接獲取$_SESSION
3 感謝 @six
1 執(zhí)行php7.4 start.php status 命令, 狀態(tài)都是idle 且 單個進程的定時器看了 基本不超過3個
2 Event.php 代碼中,沒刪除定時器的代碼
3 正式和測試的都是采取靜態(tài)單文件的php.4,環(huán)境應該是一樣
4 測試環(huán)境正常,正式不正常
5 正式和測試的代碼采取restart -d 執(zhí)行,且版本號一樣
6 我該如何排查比較合適
public static function onWebSocketConnect($client_id, $data)
{
$_SESSION['request_data'] = $data;
self::isDebug($data['get']['debug']??"");
$timer_id = Timer::add(5,function () use($client_id,&$timer_id){
// 測試環(huán)境有執(zhí)行,正式?jīng)]有,沒想到什么原因會這樣,很神奇
if(self::isDebug()){
Gateway::sendToClient($client_id, WsData::dataPackJson(
WsData::A_OK,[],"調試模式 定時任務ID執(zhí)行:{$timer_id}"));
}
self::auth();
if(empty($_SESSION['auth_id'])){
Gateway::closeClient($client_id, WsData::dataPackJson(
WsData::A_AUTH_MISS,[],"請先認證_v1"));
}
},[],false);
if(self::isDebug()){
//有發(fā)送
Gateway::sendToClient($client_id, WsData::dataPackJson(
WsData::A_OK,[],"調試模式 定時任務ID開始:{$timer_id}"));
}
}
public static function isDebug($data = null): bool
{
if (func_num_args() <= 0) {
return !empty($_SESSION['request_debug']);
}
$_SESSION['request_debug'] = $data == "jQfSfuGdzMVdDa";
return $_SESSION['request_debug'];
}
定時器是否執(zhí)行你要記錄日志或者輸出點數(shù)據(jù)到重點看下,而不是靠你業(yè)務邏輯來判定。直接在定時器里第一行打日志或者echo 點東西看下執(zhí)行到?jīng)]。
還有,定時器里不能用$_SESSION
,定時器里用$_SESSION
業(yè)務邏輯必然出現(xiàn)bug,定時器里用Gateway的session接口