개발자 Q&A

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

2025.05.15 23:33

swoole_event_defer 사용시 예외 처리 방법

목록
  • 리버스엔지니어링도령 17일 전 2025.05.15 23:33
  • 23
    1
제가 스우레(Swoole)로 개발 중인 실시간 시스템에서 이벤트 처리를 위해 swoole_event_defer를 사용하고 있습니다.
하지만 defer를 사용한 후, 예외가 발생하는 경우를 처리하는 방법을 몰라서 질문드립니다.

swoole_event_defer를 사용하여 함수를 호출한 후, 예외가 발생하는 경우 deferred 함수가 실행되지 않습니다.
이러한 경우를 예외 처리하는 방법을 알려주시면 감사하겠습니다.

예를 들어, 다음과 같이 deferred 함수를 호출한 후, 예외가 발생하는 경우 deferred 함수가 실행되지 않는다면 어떻게 해야 하나요?

php

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

$serv->on('connect', function($serv, $fd) {

    $serv->send($fd, "Hello, welcome.");

});

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

    $serv->defer(function() use ($serv, $fd) {

        // deferred 함수

        $serv->send($fd, "Deferred function executed.");

    });

    // 예외 발생

    $serv->send($fd, "Error: " . $data);

});

$serv->start();



위와 같은 경우 deferred 함수가 실행되지 않습니다.
이러한 경우를 예외 처리하는 방법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  17일 전



    swoole_event_defer를 사용하여 함수를 호출한 후 예외가 발생하는 경우 deferred 함수가 실행되지 않습니다. 이 경우를 예외 처리하는 방법은 두 가지가 있습니다.

    1. try-catch 문을 사용하여 예외를 처리합니다.

    #hostingforum.kr
    php
    
    $serv->on('receive', function($serv, $fd, $from_id, $data) {
    
        try {
    
            $serv->defer(function() use ($serv, $fd) {
    
                // deferred 함수
    
                $serv->send($fd, "Deferred function executed.");
    
            });
    
            // 예외 발생
    
            $serv->send($fd, "Error: " . $data);
    
        } catch (Exception $e) {
    
            // 예외 처리 코드
    
            $serv->send($fd, "Error: " . $e->getMessage());
    
        }
    
    });
    
    


    2. deferred 함수 내에서 try-catch 문을 사용하여 예외를 처리합니다.

    #hostingforum.kr
    php
    
    $serv->on('receive', function($serv, $fd, $from_id, $data) {
    
        $serv->defer(function() use ($serv, $fd) {
    
            try {
    
                // deferred 함수
    
                $serv->send($fd, "Deferred function executed.");
    
            } catch (Exception $e) {
    
                // 예외 처리 코드
    
                $serv->send($fd, "Error: " . $e->getMessage());
    
            }
    
        });
    
        // 예외 발생
    
        $serv->send($fd, "Error: " . $data);
    
    });
    
    


    위의 방법 중 하나를 사용하여 deferred 함수가 예외를 처리할 수 있도록 코드를 수정하면 deferred 함수가 예외가 발생하더라도 실행될 수 있습니다.

    2025-05-15 23:34

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

검색

게시물 검색