private function checkSwooleStatus()

in provider/fsof/FSOFProtocol.php [136:177]


	private function checkSwooleStatus($request, $host, $port)
	{
		$status = self::FSOF_SWOOLE_STATUS_OK;
		$appConfig = $this->getAppConfig();
		if(false == $appConfig['fsof_setting']['overload_mode'])
		{
			return $status;
		}
		$reqInQueueTime = DubboParser::getReqInQueueTime($request);
		if($reqInQueueTime)
		{
			$appName = $this->getAppName();
			//waiting time inqueue(ms)
			$waitingTime = $appConfig['fsof_setting']['waiting_time'];
			//Number of packet overload in a row
			$overloadNumber = $appConfig['fsof_setting']['overload_number'];
			$lossNumber = $appConfig['fsof_setting']['loss_number'];
            $this->logger->debug($host.":".$port.', waitingTime = '.$waitingTime.', overloadNumber = '.$overloadNumber.', lossNumber = '.$lossNumber);
			$curTimestamp = round(microtime(TRUE)*1000);
			$reqInQueueTime_ms = round($reqInQueueTime / 1000);
			if(($curTimestamp - $reqInQueueTime_ms) >= $waitingTime)
			{
				//swoole_table记录过载的次数新增1
				$this->server->getOverloadMonitor()->overloadIncr();
                $this->logger->warn($host.':'.$port.'|' .$appName.'|服务过载|inQueue:'.$reqInQueueTime_ms.'; curTime:'.$curTimestamp.';waitingTime:'.$waitingTime);
				//判断连续过载次数是否达到开启丢包请求阀值
				if ($this->server->getOverloadMonitor()->getoverloadNum() >= $overloadNumber)
				{
					//重置过载次数,开启过载丢包模式
					$this->server->getOverloadMonitor()->resetOverloadNum_setLossNum($lossNumber);
                    $this->logger->error($host.':'.$port.'|' .$appName.'|服务连续过载,开启丢消息模式');
				}
				$status = self::FSOF_SWOOLE_STATUS_OVERLOAD;
			}
			else
			{
				//清理swoole_table过载记录数量
				$this->server->getOverloadMonitor()->clear();
			}
		}
		return $status;
	}