PHP

다중 요청에 대한 처리(?) 고수님들 도와주세요 ㅠㅠ

0
안녕하세요 고수님들 현재 요청을 받아 다음 보기 소스와 같은 API 요청 처리 파일을 하나 작성했습니다. 1개 요청이 들어오는 경우 요청에 대한 정상 처리가 이루어지지만 동시에 여러 개의 요청이 들어오는 경우 처리를 못하는 문제..

안녕하세요 고수님들

현재 요청을 받아 다음 보기 소스와 같은 API 요청 처리 파일을 하나 작성했습니다.
1개 요청이 들어오는 경우 요청에 대한 정상 처리가 이루어지지만 동시에 여러 개의 요청이 들어오는 경우 처리를 못하는 문제가 발생하였는데 아무래도 비동기 처리 방식이 아니여서 그런거 같습니다. 하지만 아무리   고민을 해도 제가 가지고 있는 지식으로는 해결을 못해서 이렇게 질문을 올립니다. ㅠㅠ 고수님들 어떻게 소스를 수정해야 할까요? 도와주시면 정말 많은 공부가 될거라고 믿습니다.(꾸벅 꾸벅)

-문제 사항
 해당 페이지로 동시에 여러 개의 요청 시 요청에 대한 누락이 발생함
 ex : 2개 요청 시 1개 처리
 ex : 6개 요청 시 3개 처리
 ex : 18개 요청 시 6개 처리

<?php
    $ip=$_GET["ip"];

    $url ="https://api.meraki.com/api/v0/networks/xxxxxxxxxxxxxx/switch/accessControlLists";
    
    $header = array(
         "Content-Type:application/json",
         "Accept:application/json",
         "X-Cisco-Meraki-API-Key:xxxxxxxxxxxxxxxx"
    );
    
    $ch = curl_init(); //curl 로딩
    curl_setopt($ch, CURLOPT_URL,$url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    
    $res = curl_exec ($ch); 
    curl_close($ch);
    
    $ACL_list = json_decode($res,TRUE); //

    foreach ( $ACL_list['rules'] as $key=>$value ) {
        if ( $value['policy']=='allow')unset($ACL_list['rules'][$key]);//오류 방지를 위해 삭제
        if ( $value['srcCidr']=="$ip/32") $policy = $ACL_list["rules"][$key];//중복 검사
    }
    
   
   if(isset($policy)){
        echo "fail";
   }else{
        echo "succeed";
        
        $ip_add =array(
        "comment"=>"policy",
        "policy" => "deny",
        "ipVersion"=> "ipv4",
        "protocol"=> "tcp",
        "srcCidr"=> "$ip",
        "srcPort"=> "any",
        "dstCidr"=> "any",
        "dstPort"=> "any",
        "vlan"=> "any"
        );

        array_unshift($ACL_list["rules"],$ip_add);
    
        $data_json = json_encode($ACL_list);// json 형태로 변환
        print_r($data_json);
        $ch1 = curl_init();

        curl_setopt($ch1, CURLOPT_URL, $url); 
        curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, "PUT"); 
        curl_setopt($ch1, CURLOPT_HEADER, 0);
        curl_setopt($ch1, CURLOPT_HTTPHEADER, $header); 
        curl_setopt($ch1, CURLOPT_POSTFIELDS, $data_json); 
        curl_setopt ($ch1, CURLOPT_RETURNTRANSFER, 1);
        $res=curl_exec($ch1);
        
        
        curl_close($ch1);
    };
?>

 

열정만넘치는중 님께서 2021-05-14에 PHP에 올린 질문

댓글

1개의 답변

0
PHP는 개념적으로 쓰레드라기보다는 프로세스 단위로 실행되기 때문에 코드적으로 동시에 접속했을 때 특정 접속만 실행이 안될 가능성은 낮습니다.   따라서 코드의 오류를 찾기 전에 " https://api.meraki.com/api/... " API 주소에서 ..

PHP는 개념적으로 쓰레드라기보다는 프로세스 단위로 실행되기 때문에

코드적으로 동시에 접속했을 때 특정 접속만 실행이 안될 가능성은 낮습니다.

 

따라서 코드의 오류를 찾기 전에 "https://api.meraki.com/api/..." API 주소에서

정상적으로 데이터를 받아서 처리하였는지 확인하는 것이 우선일 것 같습니다.

 

API쪽 문제가 없는 경우 모든 접속에 대해 $ip 값을 출력해서 확인해볼 필요도 있을 것 같습니다.

sonaki84 2021-05-23
사탕 주기
sonaki84 님께서 2021-05-23에 PHP에 올린 글
보관하기

댓글

조회수 862
답글 1
URL