개발자 Q&A

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

2025.06.10 08:49

Swoole Server Timer 문제 해결 요청

목록
  • 코드마스터 오래 전 2025.06.10 08:49
  • 93
    1
제가 Swoole Server를 사용하여 타이머를 설정하고 clearTimer 함수를 사용하여 삭제하는 것을 시도하고 있으나, clearTimer 함수를 사용한 이후에도 이전에 설정한 타이머가 계속 실행되는 문제가 발생하고 있습니다.

SwooleServer::clearTimer 함수를 사용한 이후에도 이전에 설정한 타이머가 계속 실행되는 이유는 무엇이며, 이 문제를 해결하는 방법을 알려주세요.

특히, clearTimer 함수를 사용한 이후에도 이전에 설정한 타이머를 삭제하고자 하는 방법에 대해 알려주세요.

제가 설정한 타이머는 다음과 같습니다.

php

$server->timer->append(1000, function () use ($server) {

    echo "타이머가 실행되었습니다.n";

});



clearTimer 함수를 사용한 코드는 다음과 같습니다.

php

$server->timer->clearTimer(1000);



이러한 코드를 사용한 이후에도 이전에 설정한 타이머가 계속 실행되는 것을 확인하였습니다.

이러한 문제를 해결하기 위해 clearTimer 함수를 사용하는 방법에 대해 알려주세요.

    댓글목록

    profile_image
    나우호스팅  오래 전



    Swoole Server의 타이머를 삭제하는 방법은 `clearTimer` 함수를 사용하여 타이머 ID를 삭제하는 것입니다. 하지만, `clearTimer` 함수를 사용한 이후에도 이전에 설정한 타이머가 계속 실행되는 문제는 타이머 ID가 중복되는 경우에 발생할 수 있습니다.

    타이머 ID가 중복되는 경우는 다음과 같습니다.

    - 타이머 ID를 중복으로 설정하는 경우
    - 타이머 ID를 삭제하지 않고 다시 설정하는 경우

    이러한 문제를 해결하기 위해 다음 방법을 사용할 수 있습니다.

    1. 타이머 ID를 중복으로 설정하지 않도록 하기
    2. 타이머 ID를 삭제하고 다시 설정하기
    3. 타이머 ID를 관리하기

    1. 타이머 ID를 중복으로 설정하지 않도록 하기

    타이머 ID를 중복으로 설정하지 않도록 하기 위해서는 타이머 ID를 고유하게 관리하는 방법을 사용할 수 있습니다. 예를 들어, 타이머 ID를 사용하는 함수 내에서 타이머 ID를 생성하고 삭제하는 방법을 사용할 수 있습니다.

    #hostingforum.kr
    php
    
    $server->timer->append(1000, function ($server) {
    
        $timerId = uniqid();
    
        echo "타이머가 실행되었습니다. ($timerId)n";
    
        $server->timer->clearTimer($timerId);
    
    });
    
    


    2. 타이머 ID를 삭제하고 다시 설정하기

    타이머 ID를 삭제하고 다시 설정하기 위해서는 타이머 ID를 삭제하고 다시 설정하는 방법을 사용할 수 있습니다. 예를 들어, 타이머 ID를 삭제하고 다시 설정하는 함수를 만들 수 있습니다.

    #hostingforum.kr
    php
    
    function deleteTimer($timerId) {
    
        $server->timer->clearTimer($timerId);
    
    }
    
    
    
    function setTimer($timerId, $interval) {
    
        $server->timer->append($interval, function ($server) use ($timerId) {
    
            echo "타이머가 실행되었습니다. ($timerId)n";
    
            deleteTimer($timerId);
    
        });
    
    }
    
    
    
    setTimer(uniqid(), 1000);
    
    


    3. 타이머 ID를 관리하기

    타이머 ID를 관리하기 위해서는 타이머 ID를 관리하는 데이터 구조를 사용할 수 있습니다. 예를 들어, 배열을 사용하여 타이머 ID를 관리할 수 있습니다.

    #hostingforum.kr
    php
    
    $timers = [];
    
    
    
    function setTimer($timerId, $interval) {
    
        $timers[$timerId] = $interval;
    
        $server->timer->append($interval, function ($server) use ($timerId) {
    
            echo "타이머가 실행되었습니다. ($timerId)n";
    
            unset($timers[$timerId]);
    
        });
    
    }
    
    
    
    setTimer(uniqid(), 1000);
    
    


    이러한 방법을 사용하여 타이머 ID를 관리하고 삭제하는 방법을 사용할 수 있습니다.

    2025-06-10 08:50

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

검색

게시물 검색