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

Tornado는 파이썬으로 작성된 비동기 웹 프레임워크로, 많은 웹 애플리케이션에서 사용되고 있습니다. 이 글에서는 Tornado에서의 폴링 및 롱 폴링에 대해 알아보겠습니다.

폴링

폴링은 클라이언트가 주기적으로 서버에 요청을 보내고, 서버는 클라이언트의 요청에 응답하는 방식입니다. Tornado에서는 PeriodicCallback을 사용하여 주기적으로 작업을 수행할 수 있습니다.

예시 코드:

import tornado.ioloop

def poll():
    # 폴링 작업 수행
    print("Polling...")

# 1초마다 폴링 작업을 수행
callback = tornado.ioloop.PeriodicCallback(poll, 1000)
callback.start()

# Tornado IOLoop 시작
tornado.ioloop.IOLoop.current().start()

위의 예시 코드에서는 tornado.ioloop.PeriodicCallback을 사용하여 poll 함수를 1초마다 호출합니다. PeriodicCallback을 시작하고, tornado.ioloop.IOLoop.current().start()를 사용하여 Tornado IOLoop을 시작합니다.

롱 폴링

롱 폴링은 폴링과 비슷하지만, 서버에서 즉시 응답하지 않고 일정 기간 동안 대기한 다음에 응답을 주는 방식입니다. Tornado를 사용하여 롱 폴링을 구현할 수 있습니다.

예시 코드:

import tornado.web

class LongPollingHandler(tornado.web.RequestHandler):
    async def get(self):
        # 일정 시간 대기
        await tornado.gen.sleep(5)

        # 응답 전송
        self.write("Long polling response")

application = tornado.web.Application([
    (r"/longpolling", LongPollingHandler),
])

if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위의 예시 코드에서는 LongPollingHandler라는 Tornado 핸들러를 정의합니다. LongPollingHandlerget 메서드에서는 tornado.gen.sleep을 사용하여 5초간 대기한 다음에 응답을 전송합니다.

롱 폴링 핸들러를 Tornado 응용 프로그램에 추가하고, tornado.web.Application을 사용하여 웹 애플리케이션을 구성합니다. 마지막으로, 서버를 시작하고 tornado.ioloop.IOLoop.current().start()를 호출하여 IOLoop을 실행합니다.

폴링 및 롱 폴링은 Tornado를 사용하여 다양한 상황에서 비동기 작업을 수행하는 강력한 방법입니다. 이를 활용하여 웹 애플리케이션을 개발하면, 효율적이고 반응성이 높은 애플리케이션을 만들 수 있습니다.