[파이썬] web2py에서의 폴링 및 롱 폴링

웹 개발에서 실시간 업데이트를 구현하기 위해 폴링 및 롱 폴링 방법을 사용하는 경우가 많습니다. 이번 글에서는 web2py 프레임워크를 사용하여 폴링 및 롱 폴링을 구현하는 방법에 대해 알아보겠습니다.

폴링

폴링은 클라이언트가 일정한 간격으로 서버에 요청을 보내고, 서버는 새로운 데이터가 있는지 확인한 후에 결과를 클라이언트에게 전달하는 방식입니다. web2py에서 폴링을 구현하는 가장 간단한 방법은 AJAX를 사용하는 것입니다.

폴링 구현 예제

# controller.py

def poll():
    import time

    while True:
        # 새로운 데이터 확인하는 로직
        if new_data_available():
            response.flash = '새로운 데이터가 있습니다.'
            break

        time.sleep(1) # 1초마다 폴링

    return response.json({'message': 'success'})
<!-- view.html -->

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
    // 폴링 요청 보내는 함수
    function pollServer() {
        $.ajax({
            url: '{{=URL('poll')}}',
            method: 'GET',
            success: function(response) {
                console.log(response.message);
            },
            complete: function() {
                setTimeout(pollServer, 1000); // 1초마다 폴링
            }
        });
    }

    $(document).ready(function() {
        pollServer();
    });
</script>

위의 예제 코드에서는 poll 함수를 통해 폴링을 구현하고, 클라이언트에서는 1초마다 pollServer 함수를 호출하여 서버에 폴링 요청을 보냅니다. 서버는 new_data_available 함수를 통해 새로운 데이터가 있는지 확인하고, 데이터가 있다면 클라이언트에게 응답을 전달합니다.

롱 폴링

롱 폴링은 폴링과 비슷하지만, 서버에서 클라이언트에게 응답이 도착하기 전까지 연결을 유지하는 방식입니다. 이를 통해 더 빠른 업데이트를 구현할 수 있습니다.

롱 폴링 구현 예제

# controller.py

def long_poll():
    import time

    while True:
        # 새로운 데이터 확인하는 로직
        if new_data_available():
            response.flash = '새로운 데이터가 있습니다.'
            return response.json({'message': 'success'})

        time.sleep(1) # 새로운 데이터가 없으면 1초간 대기
<!-- view.html -->

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
    // 롱 폴링 요청 보내는 함수
    function longPollServer() {
        $.ajax({
            url: '{{=URL('long_poll')}}',
            method: 'GET',
            success: function(response) {
                console.log(response.message);

                // 응답 도착 후에 다시 롱 폴링 요청 보내기
                longPollServer();
            }
        });
    }

    $(document).ready(function() {
        longPollServer();
    });
</script>

위의 예제 코드에서는 long_poll 함수를 통해 롱 폴링을 구현하고, 클라이언트에서는 longPollServer 함수를 호출하여 서버에 롱 폴링 요청을 보냅니다. 서버는 new_data_available 함수를 통해 새로운 데이터가 있는지 확인하고, 데이터가 있다면 클라이언트에게 응답을 전달합니다. 그 후에 클라이언트는 다시 롱 폴링 요청을 보내어 계속해서 업데이트를 받을 수 있습니다.

폴링과 롱 폴링은 각각의 장단점이 있으며, 상황에 맞게 적절한 방식을 선택해야 합니다. 위의 예제 코드를 참고하여 웹 애플리케이션에서 폴링 및 롱 폴링을 활용할 수 있는 방법을 실험해보세요.