Laravel请求不返回结果

时间:2016-03-15 15:30:16

标签: php api amazon-web-services laravel-5.1

我正在使用AWS和laravel 5.1。

我有两个问题:

  • 大多数情况下,API会返回预期的结果,但有时会返回服务器 不会返回结果更长的时间。这可能是由于服务器 load(虽然我们在服务器上没有太多负载)。

    客户端等待几分钟后应用程序崩溃。任何 建议。

  • 如果客户提出了API请求,并且在获得结果之前,如果是设备 丢失互联网连接。服务器已处理数据但无法处理 把它交给客户。如何处理这个(两者都得到了 发布请求)

第一部分的示例代码

public function psychometricResponses(Request $request)
    {
        $questionId=$request->get('questionId');
        $answerId=$request->get('answerId');
        $from = $request->has('from');
        $userId = $request->has('id') ? $request->get('id') : 0;
        $name = $request->has('name') ? $request->get('name') : '';
        $email = $request->has('email') ? $request->get('email') : '';
        $gender = $request->has('gender') ? $request->get('gender') : '';
        $relationshipStatus = $request->has('relationshipStatus') ? $request->get('relationshipStatus') : '';
        if($userId!=0){
            $status = 1;
            User::where('id',$userId)->update(['status'=>1]);
        }else{
            $status = 0;
        }
        $id = $this->calculatePersonality($questionId, $answerId, $userId, $from, $name, $email, $gender, $relationshipStatus);
        return  json_encode(['code'=>200,'message'=>"success",'response'=>array('personality'=>$this->_getPersonality($id),'psychometricId'=>$id,'status'=>$status)]);    
    }


public function calculatePersonality($questionId, $answerId, $userId, $from, $name, $email, $gender, $relationshipStatus)
    {
        //
        $questionArray = explode(',', $questionId); //arraySize is 60
        $answerArray = explode(',', $answerId);     // //arraySize is 60
        $this->questionAll = $this->_questionAll();
        $personality = array('O'=>0,'C'=>0,'E'=>0,'A'=>0,'N'=>0);
        for($i=0; $i<sizeof($answerArray);$i++){
            $type = $this->_getQuestionType($questionArray[$i]);
            if($type=='O'){
                $personality['O'] = $answerArray[$i]=='1' ? $personality['O']+1 : $personality['O']-1;
            }else if($type=='OR'){
                $personality['O'] =$answerArray[$i]=='1' ? $personality['O']-1 : $personality['O']+1;
            }else if($type=='C'){
                $personality['C'] = $answerArray[$i]=='1' ? $personality['C']+1 : $personality['C']-1;
            }else if($type=='CR'){
                $personality['C'] = $answerArray[$i]=='1' ? $personality['C']-1 : $personality['C']+1;
            }else if($type=='E'){
                $personality['E'] = $answerArray[$i]=='1' ? $personality['E']+1 : $personality['E']-1;
            }else if($type=='ER'){
                $personality['E'] = $answerArray[$i]=='1'?$personality['E']-1 : $personality['E']+1;
            }else if($type=='A'){
                $personality['A'] = $answerArray[$i]=='1' ? $personality['A']+1 : $personality['A']-1;
            }else if($type=='AR'){
                $personality['A'] = $answerArray[$i]=='1' ? $personality['A']-1 : $personality['A']+1;
            }else if($type=='N'){
                $personality['N'] = $answerArray[$i]=='1'? $personality['N']+1 : $personality['N']-1;
            }else if($type=='NR'){
                $personality['N'] = $answerArray[$i]=='1' ? $personality['N']-1 : $personality['N']+1;
            }
        }
        $mod = array();
        $mod['O'] = abs($personality['O']);
        $mod['C'] = abs($personality['C']);
        $mod['E'] = abs($personality['E']);
        $mod['A'] = abs($personality['A']);
        $mod['N'] = abs($personality['N']);
        arsort($mod);
        $values = array_keys($mod);
        $pTypeOne = $personality[$values[0]] < 0 ? $values[0].'R' : $values[0];
        $pTypeTwo = $personality[$values[1]] < 0 ? $values[1].'R' : $values[1];
        $pTypeThree = $personality[$values[2]] < 0 ? $values[2].'R' : $values[2];
        $pTypeFour = $personality[$values[3]] < 0 ? $values[3].'R' : $values[3];
        $pTypeFive = $personality[$values[4]] < 0 ? $values[4].'R' : $values[4];
        $psychometricResponse = PsychometricResponse::create(array('typeA'=>$pTypeOne, 'valueA'=>$personality[$values[0]],'typeB'=>$pTypeTwo, 'valueB'=>$personality[$values[1]],
            'typeC'=>$pTypeThree, 'valueC'=>$personality[$values[2]],'typeD'=>$pTypeFour, 'valueD'=>$personality[$values[3]],
        'typeE'=>$pTypeFive, 'valueE'=>$personality[$values[4]],'questionId'=>$questionId,'answerId'=>$answerId, 'userId'=>$userId, 'from'=>$from,'name'=>$name,'email'=>$email, 'gender'=>$gender,'relationshipStatus'=>$relationshipStatus));
        return $psychometricResponse->id;

    }


private function _questionAll(){
        $question = PsychometricQuestion::where('isActive',1)->get(['id','type']);
        $result =array();
        for($i=0;$i<sizeof($question);$i++){
            $result[$question[$i]->id] = $question[$i]->type;
        }
        return $result;

    }

    private function _getQuestionType($id){
        return $this->questionAll[$id];
    }

private function _getPersonality($id){
    $personality = PsychometricResponse::where('id',$id)->first(['typeA','typeB','typeC','typeD','typeE','valueA','valueB']);
    $combined = array($personality->typeA,$personality->typeB);
    sort($combined);
    $combinedPersonality = PsychometricResult::where('type',$combined[0]."-".$combined[1])->first(['type','keyword','description','colorCode']); //Table PsychometricResult has 40 rows only.
    $primaryPersonality = PsychometricResult::where('type',$personality->typeA)->first(['type','keyword','description','colorCode']);
    $secondaryPersonality = PsychometricResult::where('type',$personality->typeB)->first(['type','keyword','description','colorCode']);
    $permutation = $this->_getAllPermutation($personality);
    $stylePersonality = PsychometricStyle::whereIn('type',$permutation)->get(['type','aspect','style','description']);
    $primaryPercentage = round(abs($personality->valueA)/(abs($personality->valueA)+abs($personality->valueB)), 2);
    $secondaryPercentage = 1 - $primaryPercentage;
    return array('primaryPersonality'=>$primaryPersonality,'secondaryPersonality'=>$secondaryPersonality,'combinedPersonality'=>$combinedPersonality,
        'styles'=>$stylePersonality,'primaryPercentage'=>$primaryPercentage,'secondaryPercentage'=>$secondaryPercentage);
}

private function _getAllPermutation($personality){
    $combined = array($personality->typeA,$personality->typeB,$personality->typeC,$personality->typeD,$personality->typeE);
    sort($combined);
    $permutation = array();
    for($i=0;$i<sizeof($combined);$i++){
        for($j=$i+1;$j<5;$j++){
            array_push($permutation,$combined[$i]."-".$combined[$j]);
        }
    }
    return $permutation;
}

0 个答案:

没有答案