열정만넘치는중

열정만넘치는중

PHPPhython

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

안녕하세요 고수님들 현재 요청을 받아 다음 보기 소스와 같은 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); }; ?>  
1.3K
1
0
sonaki84
sonaki84·2021-05-23
PHP는 개념적으로 쓰레드라기보다는 프로세스 단위로 실행되기 때문에 코드적으로 동시에 접속했을 때 특정 접속만 실행이 안될 가능성은 낮습니다.   따라서 코드의 오류를 찾기 전에 "https://api.meraki.com/api/..." API 주소에서 정상적으로 데이터를 받아서 처리하였는지 확인하는 것이 우선일 것 같습니...