Skip to content

hjp7461/pyWebSocket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebSocket Asyncio 서버-클라이언트

이 프로젝트는 Python의 websockets 라이브러리와 asyncio를 활용한 웹소켓 서버 및 클라이언트를 구현했습니다. 30초 간격의 ping/pong 메커니즘을 통해 연결 상태를 유지하는 안정적인 통신을 제공합니다.

특징

  • 비동기 통신 (asyncio)를 활용한 고성능 구현
  • 30초 간격의 자동 ping/pong 메커니즘을 통한 연결 상태 모니터링
  • 사용자 입력과 독립적으로 동작하는 ping/pong 처리
  • 연결 상태 및 메시지 교환에 대한 상세 로깅
  • 안정적인 오류 처리 및 연결 관리

요구사항

  • Python 3.7 이상
  • websockets 라이브러리
  • asyncio 모듈 (Python 3.4 이상에 내장)

설치

pip install websockets

구성 요소

1. 웹소켓 서버 (websocket-server.py)

서버는 다음 기능을 제공합니다:

  • 다중 클라이언트 연결 관리
  • 30초 간격의 ping 메시지 전송
  • 클라이언트 ping에 대한 pong 응답
  • 클라이언트와의 메시지 교환

주요 클래스:

  • ServerConnection: 개별 클라이언트 연결을 관리
  • WebSocketServer: 서버 기능 및 연결 관리 기능 제공

2. 웹소켓 클라이언트 (websocket-client.py)

클라이언트는 다음 기능을 제공합니다:

  • 서버 연결 및 재연결 관리
  • 30초 간격의 ping 메시지 전송
  • 서버 ping에 대한 pong 응답
  • 사용자 입력을 통한 메시지 전송

주요 클래스:

  • ClientConnection: 서버 연결을 관리
  • WebSocketClient: 클라이언트 기능 제공

사용 방법

서버 실행

python websocket-server.py

기본적으로 서버는 0.0.0.0:8765에서 실행됩니다.

클라이언트 실행

python websocket-client.py

기본적으로 클라이언트는 ws://localhost:8765에 연결을 시도합니다.

메시지 전송

클라이언트를 실행하면 메시지 입력 프롬프트가 표시됩니다. 원하는 메시지를 입력하고 Enter 키를 누르면 서버로 전송됩니다.

전송할 메시지 (종료하려면 'exit' 입력):

'exit'를 입력하면 클라이언트가 종료됩니다.

코드 구조

서버 구조

WebSocketServer
├── __init__(host, port)
├── handler(websocket, path)
├── ping_handler(connection, client_id)
├── start_server()
└── main()

클라이언트 구조

WebSocketClient
├── __init__(uri)
├── connect()
├── ping_handler()
├── message_handler()
├── user_input_handler()
├── send_message(message)
├── close()
├── run()
└── main()

핑/퐁 메커니즘

  1. 서버와 클라이언트는 각각 30초 간격으로 ping 메시지를 전송합니다.
  2. 상대방은 ping 메시지를 받으면 자동으로 pong으로 응답합니다.
  3. ping에 대한 응답이 20초 내에 오지 않으면 연결 타임아웃이 발생합니다.
  4. ping/pong 교환은 로그에 기록되어 연결 상태를 모니터링할 수 있습니다.

비동기 처리

이 구현은 다음과 같은 비동기 태스크를 사용합니다:

서버

  • 핑 전송 태스크 (ping_handler)
  • 메시지 수신 태스크 (웹소켓 핸들러 내부)

클라이언트

  • 핑 전송 태스크 (ping_handler)
  • 메시지 수신 태스크 (message_handler)
  • 사용자 입력 태스크 (user_input_handler)

각 태스크는 독립적으로 실행되며, 다른 태스크의 블로킹 없이 자체 작업을 수행합니다.

오류 처리

서버와 클라이언트 모두 다음과 같은 오류 상황을 처리합니다:

  • 연결 실패
  • 연결 종료
  • 핑/퐁 실패
  • 메시지 송수신 실패
  • 예기치 않은 예외

오류가 발생하면 적절한 로그 메시지가 표시되고, 필요한 경우 연결 재설정 또는 프로그램 종료가 수행됩니다.

로깅

logging 모듈을 사용하여 다양한 이벤트와 오류를 로깅합니다:

  • 연결 설정/종료
  • 핑/퐁 교환
  • 메시지 송수신
  • 오류 및 예외

로그 형식: 시간 - 로거이름 - 로그레벨 - 메시지

라이선스

MIT 라이선스

참고 문헌

About

이 프로젝트는 Python의 `websockets` 라이브러리와 `asyncio`를 활용한 웹소켓 서버 및 클라이언트를 구현했습니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages