웹 소켓은 클라이언트와 서버 간에 실시간 양방향 통신을 제공하는 프로토콜입니다. 이를 사용하면 서버에서 클라이언트로 데이터를 푸시할 수 있으며, 클라이언트도 서버로부터 실시간으로 데이터를 수신할 수 있습니다.
웹 소켓 프로토콜
웹 소켓 프로토콜은 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
객체를 사용하여 웹 소켓 클라이언트를 구현할 수 있습니다. 이를 통해 실시간으로 데이터를 주고받을 수 있는 웹 어플리케이션을 개발할 수 있습니다.