[python] 웹 소켓을 이용한 실시간 통신

웹 소켓은 클라이언트와 서버 간에 실시간 양방향 통신을 제공하는 프로토콜입니다. 이를 사용하면 서버에서 클라이언트로 데이터를 푸시할 수 있으며, 클라이언트도 서버로부터 실시간으로 데이터를 수신할 수 있습니다.

웹 소켓 프로토콜

웹 소켓 프로토콜은 HTTP와는 달리 지속적인 연결을 유지하고 양방향 통신을 가능하게 합니다. 클라이언트와 서버는 핸드쉐이크를 통해 연결을 설정하고, 이후에는 메시지를 주고받을 수 있습니다.

Python을 사용한 웹 소켓 서버 구현

Python에서는 websockets 라이브러리를 사용하여 웹 소켓 서버를 구현할 수 있습니다. 아래는 간단한 예제 코드입니다.

import asyncio
import websockets

async def handle_websocket(websocket, path):
    # 클라이언트와 연결되었을 때 실행되는 핸들러 함수
    while True:
        message = await websocket.recv()
        # 클라이언트로부터 메시지를 수신
        await websocket.send('받은 메시지: ' + message)
        # 클라이언트에게 메시지를 전송

start_server = websockets.serve(handle_websocket, 'localhost', 8000)
# 웹 소켓 서버를 localhost의 8000 포트에서 실행

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

위의 코드에서 handle_websocket 함수는 클라이언트와 연결되었을 때 호출되는 핸들러 함수입니다. 해당 함수에서 클라이언트로부터 메시지를 수신하고, 다시 클라이언트에게 메시지를 전송합니다.

JavaScript를 사용한 웹 소켓 클라이언트 구현

웹 소켓 클라이언트는 JavaScript의 WebSocket 객체를 사용하여 구현할 수 있습니다. 아래는 간단한 예제 코드입니다.

const websocket = new WebSocket('ws://localhost:8000');
// 웹 소켓 서버에 연결

websocket.onopen = function() {
    // 연결되었을 때 호출되는 콜백 함수
    websocket.send('안녕하세요!');
    // 서버로 메시지 전송
};

websocket.onmessage = function(event) {
    // 서버로부터 메시지를 수신했을 때 호출되는 콜백 함수
    console.log('받은 메시지:', event.data);
};

위의 코드에서 WebSocket 객체를 생성하고 onopen 이벤트 핸들러와 onmessage 이벤트 핸들러를 등록합니다. onopen 이벤트 핸들러는 연결이 성공적으로 이루어졌을 때 호출되며, onmessage 이벤트 핸들러는 서버로부터 메시지를 수신했을 때 호출됩니다.

결론

웹 소켓은 실시간 통신을 구현하는데 매우 유용한 프로토콜입니다. Python에서는 websockets 라이브러리를 사용하여 웹 소켓 서버를 구현할 수 있으며, JavaScript에서는 WebSocket 객체를 사용하여 웹 소켓 클라이언트를 구현할 수 있습니다. 이를 통해 실시간으로 데이터를 주고받을 수 있는 웹 어플리케이션을 개발할 수 있습니다.