# Flask-SocketIO에서 `connected_clients` 상태 관리 문제 해결
## 문제
- Flask-SocketIO에서 클라이언트 연결 상태를 관리하는 `connected_clients`가 업로드 요청 이후 비워지는 문제가 발생.
- 멀티프로세스 환경에서 상태 동기화가 이루어지지 않아 발생한 것으로 추정.
## 원인 분석
1. **멀티프로세스 환경**: `ProcessPoolExecutor`로 인해 각 워커가 독립된 메모리 공간을 사용.
3. **상태 공유 문제**: 전역 상태(`connected_clients`)가 워커 간 동기화되지 않음.
로 추정
## 해결 방안
### 1. 멀티스레드 전환
- `async_mode='threading'`으로 설정하여 단일 프로세스에서 상태를 공유.(이 방법은 안됨 멀티 프로세스 사용해야함)
### 2. Redis 통합
- Flask-SocketIO와 Redis를 연동해 상태 동기화. ( 워커 1로 테스트 해보고 안되면 Redis 사용하자)
### 3. 상태 관리 개선
- `connected_clients`를 Redis에 저장해 모든 워커에서 접근 가능하도록 수정.
## 결론
- 멀티프로세스 환경에서 상태 동기화 문제를 해결하려면 Redis를 사용하는 것이 권장.
- 단순한 상태 관리가 필요하면 멀티스레드 전환으로 해결 가능.
'플러팅 AI > Flask Server' 카테고리의 다른 글
| 다중 워커 간 메모리 공유 문제 해결 (0) | 2024.12.03 |
|---|---|
| 다중 워커 간 메모리 공유 문제 이해 (0) | 2024.11.30 |
| Socket.IO 클라이언트가 메시지를 일부만 수신하는 문제 (3) | 2024.11.27 |
| Flask 서버에서 SocketIO를 이용한 개별 응답 처리 방법 (0) | 2024.11.22 |
| flask 서버 Docker로 패키징 (2) | 2024.11.20 |