>백엔드 개발 >PHP 튜토리얼 >Swoole 학습의 비동기 작업 분석

Swoole 학습의 비동기 작업 분석

不言
不言원래의
2018-07-11 13:51:292543검색

이 글은 주로 Swoole 학습을 위한 비동기 작업 분석을 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

비동기 작업이란 무엇인가요?

1. 후속 트랜잭션에 영향을 주지 않고 실행할 수 있도록 현재 작업을 TaskWorker 프로세스 풀에 비동기식으로 전달합니다.
예:

Swoole 학습의 비동기 작업 분석

이 솔루션은 오랜 시간이 필요한 일부 작업에 채택될 수 있습니다
성능 및 사용자 경험 측면에서 기존 방법보다 훨씬 편안합니다

Test

web_server.php

$server = new swoole_websocket_server("0.0.0.0", 8811);
$server->set(
    [
        'task_worker_num' => 2,//设置异步任务的工作进程数量,可以根据任务的耗时和任务量配置适量的task进程。
    ]
);

$server->on('message', function ($server, $frame) {
    echo 'fd为: '.$frame->fd.'发送了:'.$frame->data."\n";
    //投递异步任务
    $task_id = $server->task($frame->fd);
      echo "我们继续访问\n";
});


$server->on('task', function ($server, $task_id, $from_id,$data) {
    for ($i=1; $i finish($data);
});

//处理异步任务的结果
$server->on('finish', function ($server, $task_id, $data) {
    echo 'fd为:'.$data.',task为:'.$task_id.'任务完成的时间是:'.date('Y-m-d H:i:s')."\n";
});


$server->start();

클라이언트 js 코드

    var url='ws://你的ip地址:8811';
    var websocket =new WebSocket(url);

websocket.onopen = function (evt) {
    console.log("Connected to WebSocket server.");
    websocket.send('客户端:建立链接成功');
};

websocket.onclose = function (evt) {
    console.log("Disconnected");
};

websocket.onmessage = function (evt) {
    console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
    console.log('Error occured: ' + evt.data);
};

먼저 web_server를 열고,
브라우저를 통해 두 클라이언트를 엽니다. 프로세스를 구분하기 위해 두 클라이언트를 몇 초 간격으로 열었습니다

이때 터미널을 보면 이렇습니다. 핵심 포인트:

Swoole 학습의 비동기 작업 분석결론

그래서 우리는 다음과 같은 결론에 도달했습니다.

1.task는 후속 실행에 영향을 주지 않고 프로세스로 백그라운드에서 실행될 수 있습니다. 여기서는 비동기식입니다.

2.task 여러 항목을 설정할 수 있습니다 . 하나의 작업이 사용 중이면 다른 작업을 사용하세요.
3. 작업이 완료되면 유휴 상태가 되며 다음 클라이언트에서 사용할 수 있습니다. (이 경우에는 효과가 나타나지 않으므로 관심이 있으면 테스트할 수 있습니다. )

주의사항

1. 과도한 성능 오버헤드를 방지하기 위해 작업 수에 주의하세요

2. 차단된 프로세스는 리소스를 많이 소모하고 오랫동안 사용되지 않도록 주의하세요. 다음 클라이언트

3. 종료/다이는 작업자 프로세스를 종료하게 합니다.

Extensions

파일 읽기 및 쓰기, mysql 읽기 및 쓰기,

비동기화도 동일합니다. IO는 결과를 먼저 반환한 후 IO를 수행하는데, 이는 시간이 오래 걸리지만 결과가 프로그램에 영향을 미치지 않는 상황에서 주로 사용됩니다. 예:

기사 읽기 볼륨 +1
동기화 프로세스는 redis/mysql 데이터 + 1->기사 표시
비동기 프로세스는 기사를 직접 표시한 다음 redis/mysql 데이터 +1로 보내는 것입니다.

이 방법으로 사용자는 대기 시간을 줄일 수 있습니다
물론 적용할 수 있는 시나리오도 많이 있습니다. 관심 있는 친구들은 문서의 io 부분을 계속 공부할 수 있습니다. 여기서는 자세한 내용을 다루지 않겠습니다.
위 내용은 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. PHP 중국어 웹사이트!

관련 권장 사항:

Swoole을 사용하여 서버를 만드는 방법(2부)

Swoole을 학습하여 Swoole 소개

위 내용은 Swoole 학습의 비동기 작업 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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