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 핸들러를 정의합니다. LongPollingHandler
의 get
메서드에서는 tornado.gen.sleep
을 사용하여 5초간 대기한 다음에 응답을 전송합니다.
롱 폴링 핸들러를 Tornado 응용 프로그램에 추가하고, tornado.web.Application
을 사용하여 웹 애플리케이션을 구성합니다. 마지막으로, 서버를 시작하고 tornado.ioloop.IOLoop.current().start()
를 호출하여 IOLoop을 실행합니다.
폴링 및 롱 폴링은 Tornado를 사용하여 다양한 상황에서 비동기 작업을 수행하는 강력한 방법입니다. 이를 활용하여 웹 애플리케이션을 개발하면, 효율적이고 반응성이 높은 애플리케이션을 만들 수 있습니다.