개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.11 01:27

Swoole_async_read에 대한 질문

목록
  • 클린아키텍처광 13일 전 2025.03.11 01:27
  • 12
    1
저는 swoole_async_read 함수를 사용하여 비동기적으로 데이터를 읽어오려고 합니다.
이 함수는 읽어온 데이터가 없을 때 대기하는 동작을 어떻게 수행할 수 있는지 궁금합니다.

다음과 같은 코드를 작성했는데, swoole_async_read가 종료되기 전에 읽어온 데이터가 없을 때 어떻게 대기할 수 있는지 알려주세요.

php

$server = new swoole_server("0.0.0.0", 9501);

$server->set([

    'worker_num' => 4,

    'max_request' => 10000,

    'max_conn' => 10000,

]);



$server->on('start', function (swoole_server $server) {

    echo "Server is started.n";

});



$server->on('connect', function (swoole_server $server, $fd, $from_id) {

    echo "Client: $fd connect.n";

});



$server->on('receive', function (swoole_server $server, $fd, $from_id, $data) {

    $server->send($fd, "Hello, client.n");

    $server->asyncRead($fd, function (swoole_server $server, $fd, $from_id, $data) {

        echo "Client: $fd received data: $datan";

    });

});



$server->on('close', function (swoole_server $server, $fd, $from_id) {

    echo "Client: $fd close.n";

});



$server->start();


    댓글목록

    profile_image
    나우호스팅  13일 전



    swoole_async_read 함수는 비동기적으로 데이터를 읽어오기 위한 함수입니다. 이 함수는 읽어온 데이터가 없을 때 대기하는 동작을 수행하기 위해 swoole_server의 on('task') 이벤트를 사용할 수 있습니다.

    on('task') 이벤트는 worker 프로세스에서 발생하며, task 큐에 데이터를 삽입할 때 호출됩니다. 이 이벤트를 사용하여 읽어온 데이터가 없을 때 대기할 수 있습니다.

    다음은 예제 코드입니다.

    #hostingforum.kr
    php
    
    $server = new swoole_server("0.0.0.0", 9501);
    
    $server->set([
    
        'worker_num' => 4,
    
        'max_request' => 10000,
    
        'max_conn' => 10000,
    
    ]);
    
    
    
    $server->on('start', function (swoole_server $server) {
    
        echo "Server is started.n";
    
    });
    
    
    
    $server->on('connect', function (swoole_server $server, $fd, $from_id) {
    
        echo "Client: $fd connect.n";
    
    });
    
    
    
    $server->on('receive', function (swoole_server $server, $fd, $from_id, $data) {
    
        $server->send($fd, "Hello, client.n");
    
        $server->asyncRead($fd, function (swoole_server $server, $fd, $from_id, $data) {
    
            echo "Client: $fd received data: $datan";
    
            // 읽어온 데이터가 없을 때 대기
    
            $server->task("wait_data", $fd);
    
        });
    
    });
    
    
    
    $server->on('task', function (swoole_server $server, $task_id, $from_id, $data) {
    
        // task 큐에 데이터가 삽입되었을 때 호출
    
        echo "Task: $task_id received data: $datan";
    
        // 읽어온 데이터가 없을 때 대기
    
        swoole_timer_after(1000, function () use ($server, $task_id) {
    
            $server->finish($task_id);
    
        }, $task_id);
    
    });
    
    
    
    $server->on('finish', function (swoole_server $server, $task_id, $from_id, $data) {
    
        // task 큐에서 데이터가 제거되었을 때 호출
    
        echo "Task: $task_id finished.n";
    
    });
    
    
    
    $server->on('close', function (swoole_server $server, $fd, $from_id) {
    
        echo "Client: $fd close.n";
    
    });
    
    
    
    $server->start();
    
    


    이 예제 코드에서는 on('task') 이벤트를 사용하여 읽어온 데이터가 없을 때 대기합니다. task 큐에 데이터를 삽입할 때 호출되는 이 이벤트를 사용하여 대기할 수 있습니다.

    2025-03-11 01:28

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 6,054건 / 221 페이지

검색

게시물 검색