[python] Tornado를 사용한 웹 소켓 개발

[TOC]

소개

웹 소켓은 실시간 양방향 통신을 지원하기 위한 기술로, Tornado는 Python의 비동기 웹 프레임워크로서 웹 소켓을 쉽게 개발할 수 있는 기능을 제공합니다. 이번 블로그 포스트에서는 Tornado를 사용하여 간단한 웹 소켓 서버를 개발하는 방법을 알아보겠습니다.

설치

Tornado를 설치하기 위해서는 pip를 사용합니다. 아래의 명령어를 터미널에 입력하여 Tornado를 설치합니다.

pip install tornado

웹 소켓 서버 개발

Tornado를 사용하여 웹 소켓 서버를 개발하는 방법은 매우 간단합니다. 아래의 예제 코드를 참고하여 웹 소켓 서버를 개발할 수 있습니다.

import tornado.ioloop
import tornado.web
import tornado.websocket

class WebSocketHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print("WebSocket 연결이 열렸습니다.")

    def on_message(self, message):
        print("메시지를 받았습니다:", message)
        self.write_message("메시지를 받았습니다.")

    def on_close(self):
        print("WebSocket 연결이 닫혔습니다.")

def make_app():
    return tornado.web.Application([
        (r"/ws", WebSocketHandler),
    ])

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

위의 예제 코드는 Tornado의 WebSocketHandler를 상속받아 웹 소켓 서버를 구현한 것입니다. open, on_message, on_close 메서드를 오버라이딩하여 웹 소켓 연결이 열리고, 메시지를 받았을 때, 연결이 닫혔을 때의 동작을 정의할 수 있습니다.

서버 실행

해당 예제 코드를 실행하기 위해서는 터미널에서 다음과 같은 명령어를 입력합니다.

python server.py

서버가 실행되면 WebSocket 연결이 열렸습니다. 메시지가 출력됩니다. 이제 클라이언트와 메시지를 주고받을 수 있습니다.

클라이언트와의 통신

웹 소켓 서버와 클라이언트 간의 통신을 위해서는 웹 소켓 클라이언트를 사용해야 합니다. 이를 위해 JavaScript에서 제공하는 WebSocket 객체를 사용할 수 있습니다.

var socket = new WebSocket("ws://localhost:8888/ws");

socket.onopen = function() {
    console.log("WebSocket 연결이 열렸습니다.");
};

socket.onmessage = function(event) {
    console.log("메시지를 받았습니다:", event.data);
};

socket.onclose = function() {
    console.log("WebSocket 연결이 닫혔습니다.");
};

위의 코드는 웹 소켓 서버에 연결하는 JavaScript 코드입니다. onopen, onmessage, onclose 이벤트 핸들러를 등록하여 연결이 열렸을 때, 메시지를 받았을 때, 연결이 닫혔을 때의 동작을 정의할 수 있습니다.

결론

Tornado를 사용하여 웹 소켓 서버를 개발하는 방법에 대해 알아보았습니다. Tornado의 간편한 API를 활용하면 몇 줄의 코드로도 강력한 웹 소켓 서버를 구현할 수 있습니다. 추가적인 기능이나 구현 방법에 대해서는 Tornado 공식 문서를 참고하시기 바랍니다.

참고 자료