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!"라는 메시지를 보내고, 서버로부터의 응답을 받아 출력하는 웹소켓 클라이언트를 구현한 것

 

실행

먼저 서버를 실행한 다음, 클라이언트를 실행

서버와 클라이언트가 연결되면 클라이언트는 서버에 메시지를 보내고, 서버는 클라이언트로부터 받은 메시지를 다시 돌려줌

웹소켓을 사용하면 위 예제처럼 간단하게 실시간 통신을 구현할 수 있음

필요에 따라 서버와 클라이언트 코드를 수정하여 원하는 기능을 구현 가능함

참고

https://wikidocs.net/218440

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

+ Recent posts