in provider/fsof/FSOFProtocol.php [324:379]
public function onOneRequest($client_id, $request)
{
if($this->parser->isHearBeatRequest($request))
{
//心跳请求,不需要数据回送
}
else if($this->parser->isNormalRequest($request) || $this->parser->isOneWayRequest($request))
{
//获取配置信息
$appConfig = $this->getAppConfig();
//Number of packet loss in a row
$lossNumber = $appConfig['fsof_setting']['loss_number'];
//判断是否开启过载丢包模式
$restOfLostNum = $this->server->getOverloadMonitor()->getLossNum();
if($restOfLostNum > 0)
{
// 加入对过载丢失数据的统计
$this->server->getAppMonitor()->onRequest($request);
//回复客户端
if($restOfLostNum >= $lossNumber)
{
if($this->swoole_server->exist($client_id))
{
$result = 'provider连续过载, 开启丢消息模式';
$this->packResponse($client_id, $request, $result, false, true);
}
}
else
{
if($this->swoole_server->exist($client_id))
{
$result = 'provider开启丢消息模式, 连续丢包中...';
$this->packResponse($client_id, $request, $result, false, true);
}
}
//递减丢包数量
$this->server->getOverloadMonitor()->lossNumDecr();
//监控请求错误处理数量
$this->server->getAppMonitor()->onError($request);
}
else
{
$this->requestProcessor($client_id,$request);
}
}
else
{
$this->logger->error("invalid request = $request");
}
}