네트워크 개발에서 RPC(Remote Procedure Call)는 원격 프로그램이 서로 호출하여 분산 애플리케이션을 구현할 수 있도록 하는 일반적인 통신 프로토콜입니다. 최근 몇 년 동안 PHP 생태계의 발전이 계속 성숙해짐에 따라 PHP 언어로 고성능 RPC를 구현해야 할 필요성이 점점 더 강해지고 있습니다. PHP 확장으로서 Swoole은 비동기식, 동시성, 고성능 네트워크를 제공합니다. 통신 기능을 갖추고 있으며 고성능 RPC 구현을 위한 최고의 선택이 되었습니다.
이 기사에서는 Swoole을 사용하여 고성능 JSONRPC 서비스를 구현하여 애플리케이션 성능과 처리량을 향상시키는 방법에 중점을 둘 것입니다.
1. JSONRPC 프로토콜 소개
JSONRPC(JavaScript Object Notation Remote Procedure Call)는 JSON 형식을 기반으로 하는 경량 원격 호출 프로토콜로, 다양한 애플리케이션이 번거로움 없이 통신할 수 있도록 통합된 인터페이스 사양 세트를 정의합니다. JSONRPC 프로토콜에서 각 요청과 응답은 JSON 개체이며 둘 다 요청과 응답 간의 해당 관계를 식별하는 id 필드를 포함합니다.
요청 예:
{ "jsonrpc": "2.0", "method": "login", "params": { "username": "user", "password": "pass" }, "id": 1 }
응답 예:
{ "jsonrpc": "2.0", "result": true, "id": 1 }
JSONRPC 프로토콜에서 요청자는 메소드 및 매개변수 필드가 포함된 요청을 전송하여 다른 애플리케이션에서 제공하는 원격 서비스를 호출합니다. 통화 결과를 반환합니다. JSONRPC 프로토콜은 일괄 요청 및 일괄 응답을 지원하므로 네트워크 통신 오버헤드를 효과적으로 줄일 수 있습니다.
2. Swoole을 사용하여 JSONRPC 서비스 구현
- Swoole 설치
시작하기 전에 먼저 Swoole 확장 프로그램을 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다.
pecl install swoole
php.ini 파일에 다음 줄을 추가하여 설치할 수도 있습니다.
extension=swoole.so
설치가 완료된 후 php -m 명령을 사용하여 swoole 여부를 확인할 수 있습니다. 확장 프로그램이 성공적으로 설치되었습니다.
- JSONRPC 서버 구현
간단한 JSONRPC 서버를 구현해 보겠습니다. 구체적인 코드는 다음과 같습니다.
<?php require_once __DIR__ . '/vendor/autoload.php'; use SwooleHttpServer; use SwooleHttpRequest; use SwooleHttpResponse; $server = new Server('0.0.0.0', 8080); $server->on('Request', function (Request $request, Response $response) { $data = $request->rawContent(); $arr = json_decode($data, true); if (isset($arr['method'])) { switch ($arr['method']) { case 'login': $result = login($arr['params']['username'], $arr['params']['password']); break; case 'register': $result = register($arr['params']['username'], $arr['params']['password']); break; default: $result = ['error' => 'Method not found']; break; } } else { $result = ['error' => 'Invalid request']; } $response->header('Content-Type', 'application/json'); $response->end(json_encode([ 'jsonrpc' => '2.0', 'result' => $result, 'id' => $arr['id'] ])); }); function login($username, $password) { // do login return true; } function register($username, $password) { // do register return true; } $server->start();
위 코드는 요청 본문을 구문 분석하여 로그인 및 등록 메서드를 처리할 수 있는 JSONRPC 서버를 구현합니다. 해당 메소드를 호출하여 처리하고, 처리 결과는 최종적으로 JSON 형식으로 반환됩니다.
- JSONRPC 클라이언트 구현
JSONRPC 서버의 기능을 테스트하려면 JSONRPC 클라이언트도 구현해야 합니다. 구체적인 코드는 다음과 같습니다.
<?php class JsonRpcClient { private $host; private $port; private $id; public function __construct($host, $port) { $this->host = $host; $this->port = $port; $this->id = 0; } public function send($method, $params) { $client = new SwooleClient(SWOOLE_SOCK_TCP); if (!$client->connect($this->host, $this->port, 0.5)) { throw new Exception('Connect failed'); } $client->send(json_encode([ 'jsonrpc' => '2.0', 'method' => $method, 'params' => $params, 'id' => ++$this->id, ])); $data = $client->recv(); if (!$data) { throw new Exception('Recv failed'); } $client->close(); $response = json_decode($data, true); if (isset($response['error'])) { throw new Exception($response['error']['message']); } return $response['result']; } } $client = new JsonRpcClient('127.0.0.1', 8080); try { $result = $client->send('login', ['username' => 'user', 'password' => 'pass']); var_dump($result); } catch (Exception $e) { echo $e->getMessage(); }
위 코드는 다음으로 보낼 수 있는 요청을 구현합니다. JSONRPC 서버를 호출하고 JSONRPC 클라이언트 응답 결과를 얻습니다. send 메소드를 호출하고 메소드 및 params 매개변수를 전달하면 JSONRPC 서버에 요청을 보내고 응답 결과를 얻을 수 있습니다. 요청이 실패하거나 오류 메시지를 반환하면 예외가 발생합니다.
3. Swoole 기반 JSONRPC 서비스 성능 테스트
Swoole 기반 JSONRPC 서비스의 성능 장점을 검증하기 위해 간단한 성능 테스트를 진행할 수 있습니다. 테스트 환경 구성은 다음과 같습니다.
- CPU: Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz
- Memory: 16GB
- OS: Ubuntu 20.04.2 LTS
- PHP 버전: 7.4 .22
- Swoole 버전: 4.7.1
테스트 방법:
- 위에 구현된 JSONRPC 서버 및 클라이언트 코드 사용
- ab 명령을 실행하고 1000개의 동시 요청을 시뮬레이션하고 각 요청을 400번 보냅니다. 기록 결과를 테스트하고 비교하십시오.
- 테스트 결과는 다음과 같습니다.
Concurrency Level: 1000 Time taken for tests: 1.701 seconds Complete requests: 400000 Failed requests: 0 Total transferred: 78800000 bytes Requests per second: 235242.03 [#/sec] (mean) Time per request: 42.527 [ms] (mean) Time per request: 0.043 [ms] (mean, across all concurrent requests) Transfer rate: 45388.31 [Kbytes/sec] received
테스트 결과 Swoole 기반 JSONRPC 서비스는 동시 요청 1000건의 경우 각 요청의 평균 처리 시간이 42.527ms에 불과하며 성능이 매우 뛰어납니다. 요청 처리량이 초당 235242.03회에 도달했습니다.
4. 요약
이 기사에서는 Swoole을 사용하여 고성능 JSONRPC 서비스를 구현하는 방법을 소개하고 성능 테스트를 통해 성능 이점을 입증합니다. 실제 애플리케이션에서는 필요에 따라 복잡한 RPC 서비스를 구현하고 Swoole의 비동기, 동시성 및 고성능 기능을 통해 애플리케이션에 더 나은 성능과 사용자 경험을 제공할 수 있습니다.
위 내용은 Swoole을 사용하여 고성능 JSONRPC 서비스를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
