>  기사  >  PHP 프레임워크  >  Swoole 비동기 프로그래밍 실습: 웹 서비스 성능을 10배 향상

Swoole 비동기 프로그래밍 실습: 웹 서비스 성능을 10배 향상

WBOY
WBOY원래의
2023-06-13 21:41:311430검색

인터넷의 급속한 발전과 함께 점점 더 많은 기업들이 웹 개발에 참여하고 있으며, 웹 서비스 성능을 어떻게 향상시킬 것인가가 중요한 이슈가 되었습니다. 최근에는 네트워크 IO 효율성을 향상시키는 기술로 비동기 프로그래밍이 점차 대중화되고 있으며, Swoole 프레임워크는 비동기 프로그래밍의 대표적인 프레임워크 중 하나입니다. 이 기사에서는 Swoole 프레임워크를 통해 비동기 프로그래밍을 구현하는 방법을 소개하고 웹 서비스 성능 향상에 미치는 중요한 효과를 보여줍니다.

1. Swoole이란

Swoole은 고성능 비동기 동시 네트워크 통신 프레임워크입니다. 이를 통해 PHP 개발자는 비동기 코드를 더 쉽게 작성하고 코드 효율성과 성능을 향상할 수 있습니다. Swoole은 TCP/UDP/Unix 도메인 소켓, HTTP 서버, WebSocket 서버는 물론 비동기 텍스트, JSON 직렬화 및 역직렬화 기능을 제공합니다. 현재 Swoole은 점점 더 많은 PHP 개발자들이 선호하고 있습니다.

2. Swoole

1. 코루틴 활성화:

Swoole에서는 비동기 프로그래밍을 지원하려면 코루틴을 활성화해야 합니다. 코루틴은 컨텍스트 전환 및 커널 모드 리소스에 대한 추가 오버헤드가 없기 때문에 스레드보다 더 가벼운 예약 방법입니다.

Swoole을 사용하여 코루틴을 사용하는 것은 매우 편리합니다. 항목 파일이나 Swoole 서버 객체에 다음 코드를 추가하기만 하면 됩니다.

SwooleRuntime::enableCoroutine();

이렇게 하면 Swoole에서 제공하는 코루틴 기능을 사용할 수 있습니다.

2. 메모리 누수에 주의하세요:

비동기 프로그래밍에 Swoole을 사용할 때는 메모리 누수에 주의해야 합니다. 비동기 프로그래밍의 코루틴은 오랜 시간 동안 I/O를 기다리기 때문에 메모리가 제때 해제되지 않으면 메모리 낭비가 발생합니다.

Swoole은 코루틴 컨텍스트를 정리하는 방법인 Coroutine::defer()를 제공합니다. 이를 사용하여 코루틴 끝에서 컨텍스트를 정리합니다. 예:

SwooleCoroutineun(function () {
    echo "Coroutine Start
";
    Coroutine::defer(function () {
        echo "Coroutine End
";
    });
});

3. Swoole 버전에 주의하세요.

Swoole의 새 버전은 계속해서 최적화되고 개선될 예정이므로 다음을 사용해야 합니다. 최신 버전. 동시에, 코드의 호환성과 안정성을 보장하기 위해 각 버전의 변경 사항에 주의를 기울여야 합니다.

3. Swoole 실습: 웹 서비스 성능 향상

아래에서는 Swoole 프레임워크를 사용하여 웹 서비스 성능을 향상시키는 방법을 보여주는 간단한 예를 사용합니다.

먼저 간단한 PHP 파일인 server.php를 만듭니다. 이 파일은 로컬 포트 ​​9501을 수신하고 Hello World 문자열을 반환합니다.

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();

명령줄을 사용하여 이 파일을 실행하고 http://127.0.0.1을 방문합니다. 9501/, Hello World가 출력되는 것을 볼 수 있습니다.

이제 이 서버의 코드를 비동기 모드로 변경합니다.

<?php
$http = new SwooleHttpServer("0.0.0.0", 9501, SWOOLE_BASE);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World!
");
});

$http->start();

위 코드에서는 SWOOLE_BASE 모드를 사용하여 서버를 시작하는 세 번째 매개변수를 추가했습니다. 이러한 방식으로 Swoole에서 제공하는 코루틴, 비동기 IO 및 이벤트 수신 기능을 사용할 수 있습니다.

다음으로 Apache Bench 도구를 사용하여 대량의 요청을 처리할 때 서버 성능을 테스트하겠습니다.

Apache Bench 도구는 실제 HTTP 요청을 시뮬레이션할 수 있으며, 제공되는 다중 스레드 동시 요청을 사용하여 동시에 서버에 액세스하는 여러 사용자를 시뮬레이션하고 다양한 요청 로드에서 서버 성능을 테스트할 수 있습니다.

Apache Bench 도구를 설치하려면 터미널에 다음 명령을 입력하세요.

# ubuntu
sudo apt-get install apache2-utils

# centos
sudo yum install httpd-tools

다음 명령을 사용하여 지금 바로 서버 성능을 테스트하세요.

ab -n 1000 -c 100 http://127.0.0.1:9501

이 명령에서는 -n 매개변수를 사용하여 총 Apache Bench 도구 수를 나타냅니다. 요청 및 -c는 동시 요청 수를 나타냅니다. 총 요청 수를 1000으로 설정하고 총 동시 요청 수를 100으로 설정했습니다.

테스트가 완료된 후 Apache Bench에서 인쇄된 테스트 결과를 볼 수 있습니다.

Concurrency Level:      100
Time taken for tests:   0.041 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      110000 bytes
HTML transferred:       12000 bytes
Requests per second:    24540.63 [#/sec] (mean)
Time per request:       4.075 [ms] (mean)
Time per request:       0.041 [ms] (mean, across all concurrent requests)
Transfer rate:          2624.27 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1    4   0.5      4       6
Waiting:        0    4   0.5      4       6
Total:          1    4   0.5      4       6

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      4
  80%      4
  90%      4
  95%      5
  98%      5
  99%      5
 100%      6 (longest request)

이 서버가 1000개의 요청을 처리할 때 각 요청의 평균 응답 시간은 4.075밀리초이고 응답 요청 수는 초당 약 24540. 이 성능 결과는 이미 매우 좋습니다.

다음으로, Swoole 프레임워크가 높은 동시성 조건에서 어떻게 작동하는지 확인하기 위해 서버의 로드를 늘립니다. 동시 요청 수를 1000으로 늘립니다. 즉:

ab -n 10000 -c 1000 http://127.0.0.1:9501

테스트가 완료된 후 Apache Bench에서 다시 테스트 결과가 인쇄되는 것을 볼 수 있습니다.

Concurrency Level:      1000
Time taken for tests:   2.437 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      1100000 bytes
HTML transferred:       120000 bytes
Requests per second:    4107.95 [#/sec] (mean)
Time per request:       243.651 [ms] (mean)
Time per request:       0.244 [ms] (mean, across all concurrent requests)
Transfer rate:          441.50 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8  84.5      0     1000
Processing:     1   22  16.0     20      176
Waiting:        0   21  16.0     20      176
Total:          1   30  86.2     20     1001

Percentage of the requests served within a certain time (ms)
  50%     20
  66%     23
  75%     25
  80%     26
  90%     30
  95%     41
  98%     52
  99%     65
 100%   1001 (longest request)

동시 요청 수가 1000에 도달하면 이 서버의 응답 시간은 약 200ms에 불과합니다. 비동기식 프로그래밍을 사용하는 동기식 웹 서버와 비교하여 Swoole은 동시성과 성능을 크게 향상시킬 수 있습니다.

4. 요약

이 글에서는 웹 서비스 성능 향상을 위한 Swoole 프레임워크와 이를 적용한 내용을 소개합니다. 우리는 Swoole을 사용하여 코루틴을 시작하는 방법, 메모리 누수에 주의하는 방법, Swoole 비동기 서버의 성능을 테스트하는 방법을 배웠습니다.

실제로는 Swoole 및 Apache Bench 도구와 같은 효율적인 도구를 사용하여 웹 서비스 성능을 향상시킬 수 있습니다. 인터넷의 높은 동시성 시나리오에서 비동기 프로그래밍에 Swoole을 사용하면 서버 성능이 크게 향상되고 고성능 웹 서비스에 대한 기업의 요구 사항을 충족할 수 있습니다.

위 내용은 Swoole 비동기 프로그래밍 실습: 웹 서비스 성능을 10배 향상의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.