개발 꿀팁/PHP

php 프로그램이 node.js 프로그램과 go 프로그램을 수신합니다

Jammie 2022. 7. 22. 16:47
반응형

일. 서언
회사 프로젝트에서는 주로 php를 서비스 언어로 개발하는데 블록체인이라는 기술은 일반적으로 노드(node)로 제공되며, 일부 하위 검증은 go를 통해 작성되는데, 우리 php가 어떻게 호출할 수 있을까.

둘, file_get_contents 또는 curl 사용
1,file_get_contents 사용 예제

예를 들어, 우리는 노드 프로그램의 기본 포트 번호가 3000이라는 것을 알고 있습니다. 그런 다음 경로를 정의하면 다음과 같이 node 프로그램에 액세스할 수 있습니다

  private function uplinkPost($url, $post_data) {
  //여기서 $post_data는 node 프로그램에 전달되는 인수로, 먼저 표준 url 전달자 형식으로 변환됩니다
  //$url은 node 프로그램에 액세스하는 주소입니다
        $postdata = http_build_query($post_data);
        $options = array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-type:application/x-www-form-urlencoded',
                'content' => $postdata,
                'timeout' => 60 * 10 // 타임아웃 시간(단위: s)
            )
        );
        //php를 통해 제공되는stream_context_create()함수 접근 프로그램
        $context = stream_context_create($options);
        $result = @file_get_contents($url, false, $context);
        //반환된 결과는 node 프로그램이 처리한 결과입니다
        return $result;
    }

구체적인 참고 사항, 바이두에서 stream_context_create() 함수를 추천합니다

2.curl을 이용하여 go프로그램을 청취한다

 function curlRequest($url,$method='get',$data=''){
        extension_loaded('curl') or die('The curl extension is not loaded.');
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);//헤더의 메시지 지우기
        // curl 파라미터를 설정하고, 결과를 변수에 저장할지, 화면에 출력할지, false를 화면에 출력할지 설정합니다。
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);//점프한 페이지를 가져올 지 여부
        if($method == 'post'){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        $return_data = curl_exec($curl);
        //$Headers =  curl_getinfo($curl);//헤더
        if (curl_errno($curl)) {
            //log_message('error', 'curl잘못:'.curl_error($curl));
            curl_close($curl);
            exit();
        }
        curl_close($curl);
        return $return_data;
    }

여기도 curl을 이용해 go 프로그램에 접속하면 된다.어떤 포트를 도청하고 싶은 프로그램이라면 ip+port 방식으로도 구현할 수 있습니다

반응형