728x90
WebSocket이란
웹소켓(WebSocket)은 양방향 통신을 제공하는 컴퓨터 통신 프로토콜 중 하나
주로 웹 브라우저와 웹 서버 간의 실시간 데이터 전송을 위해 사용됨
HTTP 프로토콜과 달리 웹소켓은 한 번의 연결로 데이터를 주고받을 수 있어서 더 효율적이며, 실시간성이 요구되는 애플리케이션에 적합함
웹소켓은 다음과 같은 특징을 가지고 있음
- 양방향 통신: 클라이언트와 서버 간에 양방향으로 데이터를 주고받을 수 있음
- 실시간성: HTTP와는 달리 웹소켓은 계속 연결을 유지하며, 변경사항이 발생하면 즉시 데이터를 전달할 수 있어서 실시간성이 요구되는 애플리케이션에 적합함
- 지속적인 연결: 웹 소켓은 지속적인 연결을 유지하여, 한번 연결되면 연결은 수동으로 종료되거나 네트워크 오류가 발생할 때까지 유지됨
- 간편한 구현: 대부분의 주요 프로그래밍 언어에는 웹소켓을 다루기 위한 라이브러리나 프레임워크가 있어서 쉽게 구현할 수 있음
Python Websockets
Python에서 웹소켓을 다루기 위해서는 보통 websockets 라이브러리를 사용
이 라이브러리를 이용하면 손쉽게 웹소켓 서버와 클라이언트를 구현할 수 있음
websockets 라이브러리 설치
pip install websockets
웹소켓 서버 작성
import asyncio
import websockets
async def echo(websocket, path):
async for message in websocket:
await websocket.send(message)
async def main():
async with websockets.serve(echo, "localhost", 8765):
await asyncio.Future() # Serve forever.
asyncio.run(main())
위 코드는 클라이언트가 보낸 메시지를 그대로 다시 돌려주는 간단한 에코(echo) 서버를 구현한 것
웹소켓 클라이언트 작성
import asyncio
import websockets
async def hello():
uri = "ws://localhost:8765"
async with websockets.connect(uri) as websocket:
await websocket.send("Hello, world!")
response = await websocket.recv()
print(response)
asyncio.run(hello())
위 코드는 서버에 "Hello, world!"라는 메시지를 보내고, 서버로부터의 응답을 받아 출력하는 웹소켓 클라이언트를 구현한 것
실행
먼저 서버를 실행한 다음, 클라이언트를 실행
서버와 클라이언트가 연결되면 클라이언트는 서버에 메시지를 보내고, 서버는 클라이언트로부터 받은 메시지를 다시 돌려줌
웹소켓을 사용하면 위 예제처럼 간단하게 실시간 통신을 구현할 수 있음
필요에 따라 서버와 클라이언트 코드를 수정하여 원하는 기능을 구현 가능함
참고
728x90
'Python' 카테고리의 다른 글
Python ZeroMQ (0) | 2024.04.11 |
---|---|
asyncio를 이용한 Python 비동기 프로그래밍 (0) | 2024.04.10 |
Python 루틴, 서브루틴, 코루틴 (1) | 2024.04.04 |
Python multiprocessing (0) | 2024.04.04 |
파이썬 사용자 정의 에러 (0) | 2024.04.02 |