반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- humble
- linux
- socketio
- ros
- error
- python
- CUDA
- tensorflow
- 오블완
- no space left on device
- ubuntu
- CLASS
- 맛집
- opencv
- 스팸
- openAI
- 티스토리챌린지
- 딥러닝
- 터미널
- ChatGPT
- 분당맛집
- Torch
- ROS2
- TTS
- string
- 판교
- GPT
- timm
- Android
- pytorch
Archives
- Today
- Total
RoBoLoG
[Python] python으로 socketio 서버와 클라이언트 만들기 본문
socketio 서버와 클라이언트 만들기
1. python-socketio란?
- 양방향 통신: 클라이언트와 서버 간에 실시간, 양방향 통신을 가능하게 합니다.
- 이벤트 기반: 통신은 이벤트 기반으로 이루어지며, 특정 이벤트가 발생했을 때 콜백 함수를 실행합니다.
- 다양한 환경 지원: python-socketio는 순수 Python 서버 뿐만 아니라, Flask, Django 등의 웹 프레임워크와도 통합될 수 있습니다.
- 다중 전송 방식 지원: WebSocket을 주 전송 방식으로 사용하지만, 다른 전송 방식도 지원합니다. 이는 클라이언트가 WebSocket을 지원하지 않는 경우에도 연결을 유지할 수 있게 해줍니다.
- 자동 재연결 및 네트워크 복구: 클라이언트 라이브러리는 네트워크 연결이 끊어졌을 때 자동으로 재연결을 시도합니다.
2. python-socketio 설치
먼저, socketio 패키지를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다:
pip install python-socketio
3. 서버 측 예시 코드 (server.py):
import socketio
# Socket.IO 서버 생성
sio = socketio.Server()
# 연결 이벤트 핸들러
@sio.event
def connect(sid, environ):
print('클라이언트가 연결되었습니다:', sid)
# 메시지 이벤트 핸들러
@sio.event
def message(sid, data):
print('클라이언트로부터 메시지 수신:', data)
# 실행할 때 웹 소켓 서버 시작
if __name__ == '__main__':
app = socketio.WSGIApp(sio)
socketio.server.SocketIOServer(('localhost', 8000), app).serve_forever()
- socketio 라이브러리 임포트: Socket.IO 서버 기능을 사용하기 위해 socketio 모듈을 임포트합니다.
- Socket.IO 서버 생성: socketio.Server()를 사용하여 Socket.IO 서버 인스턴스를 생성합니다.
- 연결 이벤트 핸들러: 클라이언트가 서버에 연결되면 실행되는 connect 이벤트 핸들러를 정의합니다. 클라이언트의 식별자(sid)와 환경 정보(environ)를 인자로 받습니다.
- 메시지 이벤트 핸들러: 클라이언트로부터 메시지를 받을 때 실행되는 message 이벤트 핸들러를 정의합니다. 클라이언트 식별자(sid)와 데이터(data)를 인자로 받습니다.
- 서버 실행: 서버 애플리케이션(socketio.WSGIApp(sio))을 생성하고, localhost의 8000번 포트에서 서버를 시작합니다. serve_forever()를 호출하여 서버가 계속 실행되도록 합니다.
4. 클라이언트 측 예시 코드 (client.py):
import socketio
# Socket.IO 클라이언트 생성
sio = socketio.Client()
# 연결 이벤트 핸들러
@sio.event
def connect():
print('서버에 연결되었습니다.')
# 서버로 메시지 전송
sio.emit('message', '안녕하세요!')
# 메시지 이벤트 핸들러
@sio.event
def message(data):
print('서버로부터 메시지 수신:', data)
# 서버에 연결
sio.connect('http://localhost:8000')
# 서버로부터 메시지 수신 대기
sio.wait()
- socketio 라이브러리 임포트: Socket.IO 클라이언트 기능을 사용하기 위해 socketio 모듈을 임포트합니다.
- Socket.IO 클라이언트 생성: socketio.Client()를 사용하여 Socket.IO 클라이언트 인스턴스를 생성합니다.
- 연결 이벤트 핸들러: 서버에 연결되면 실행되는 connect 이벤트 핸들러를 정의합니다. 서버에 연결되었다는 메시지를 출력하고, 서버로 '안녕하세요!'라는 메시지를 전송합니다.
- 메시지 이벤트 핸들러: 서버로부터 메시지를 받을 때 실행되는 message 이벤트 핸들러를 정의합니다. 수신한 데이터(data)를 출력합니다.
- 서버 연결: sio.connect('http://localhost:8000')를 호출하여 서버에 연결합니다.
- 메시지 수신 대기: sio.wait()를 호출하여 서버로부터의 메시지를 계속 기다립니다.
5. Python의 SocketIO를 언제 쓰면 좋을까?
- 실시간 통신이 필요한 경우: 채팅 애플리케이션, 실시간 알림, 실시간 데이터 업데이트 등 실시간으로 정보를 교환해야 하는 애플리케이션에 적합합니다.
- 양방향 통신이 중요한 경우: 클라이언트와 서버가 서로에게 동시에 데이터를 보내고 받아야 하는 경우에 유용합니다.
- 이벤트 기반 프로그래밍이 필요한 경우: 특정 이벤트에 따라 서버와 클라이언트가 상호작용해야 할 때, Socket.IO의 이벤트 기반 통신 방식이 적합합니다.
- 다양한 클라이언트와의 호환성이 요구되는 경우: Socket.IO는 다양한 플랫폼 및 장치에서 실행되는 클라이언트와 호환됩니다. 웹 브라우저, 모바일 앱 등 다양한 클라이언트와의 통신이 필요한 경우 유용합니다.
- WebSocket이 주된 통신 방식이지만 대체 방식도 필요한 경우: WebSocket을 지원하지 않는 환경에서도 작동할 수 있도록 폴링과 같은 대체 전송 방식을 지원합니다.
- 네트워크 중단이나 연결 문제에 대한 내성이 필요한 경우: 자동 재연결 기능을 통해 네트워크 연결이 끊어진 경우에도 클라이언트가 서버에 재연결을 시도하게 할 수 있습니다.
- 멀티플랫폼/멀티서버 환경에서의 사용: Flask, Django와 같은 Python 웹 프레임워크와 함께 사용하거나, 다중 서버 환경에서도 구현할 수 있습니다.
이러한 특성들로 인해 python-socketio는 실시간 통신이 중요한 다양한 웹 및 모바일 애플리케이션, 대화형 서비스, 게임, 협업 도구 등에 적합하며, 다양한 사용자 상호작용을 필요로 하는 애플리케이션 개발에 유용하게 사용될 수 있습니다.
728x90
반응형
'Study > Python' 카테고리의 다른 글
[Python] LINE Notify를 사용하여 LINE에 사진 메시지 전송 (0) | 2023.06.21 |
---|---|
[Python] Opencv로 간단한 모자이크 만들기 (0) | 2023.06.20 |
[Python] 10초 타이머 만들기 (0) | 2023.06.16 |
[Python] Jupyter 에서 Input() 입력함수 사용하기 (1) | 2023.02.03 |
[Python] 터미널로 .py 실행시 매개변수 입력 (argparse) (0) | 2023.01.25 |