Pygame + PyENet 기반 네트워크 예측 구조 구현 태스크, RUDP
enet 이란? ** ** UDP(User Datagram Protocol) 프로토콜 사용해서 네트워크 통신을 가능하게 해주는 라이브러리다. 하지만 일반적인 UDP 통신이 아니라 RUDP(Reliable UDP) 방식을 사용한다. RUDP는 TCP를 흉내낸 것이다. TCP의 경우 상대방에게 데이터가 정확히 전달됨을 보장하는 3-handshaking 방식을 사용한다. 하지만 UDP는 패킷 전송시 데이터그램을 보내고 난후 상대방에게 제대로 전달되었는지는 확인하지 않는다. 따라서 네트워크 전송도중 패킷 내용이 변조되거나 깨질 수 있기 때문에 데이터의 무결성을 확인하는 것이 불가능하다. 이런 문제를 해결하기 위해 RUDP는 TCP 처럼 3-handshaking 방식을 흉내낸다. enet 라이브러리는 이런 RUDP 방식을 구현한 라이브러리다. **
18-03 enet UDP(User Datagram Protocol) 프로토콜 사용해서 네트워크 통신을 가능하게 해주는 라이브러리다. 하지만 일반적인 UDP 통신이 아니라 RUDP(Reliable … UDP(User Datagram Protocol) 프로토콜 사용해서 네트워크 통신을 가능하게 해주는 라이브러리다. 하지만 일반적인 UDP 통신이 아니라 RUDP(Reliable …
ENet: Downloads ENet v1.3.18 Reliable UDP networking library Downloads You can retrieve the source to ENet by downloading it in either .tar.gz form or accessing the github distribution directly. The most recent stable release (1.3.18) can be downloaded here . The last release that is protocol compatible with the 1… ENet v1.3.18 Reliable UDP networking library Downloads You can retrieve the source to ENet by downloading it in either .tar.gz form or accessing the github distribution directly. The most recent stable release (1.3.18) can be downloaded here . The last release that is protocol compatible with the 1…
- TickManager 구현 (tick 변수 + 고정 timestep)
- InputFrame 구조 정의 (tick, 방향, 점프 등)
- InputQueue 저장소 구현 (예측용 입력 저장)
- simulate(input) 함수 작성 (입력으로 로컬 이동)
- 위치 상태 저장 (StateFrame)
- 1프레임 후 상태를 복원하고 재시뮬레이션하는 롤백 기능 추가
- PyENet 설치 (pip install pyenet)
- 서버 초기화 (포트 7777)
- 클라이언트 연결 관리 (peer.address)
- InputFrame 수신 및 파싱
- 서버 측 simulate()로 상태 계산
- StateFrame 응답 전송 (tick, 위치)
- Pygame에 PyENet 클라이언트 바인딩
- 주기적으로 InputFrame 전송
- 서버 응답으로 StateFrame 수신
- 수신한 tick의 상태와 로컬 상태 비교 → 보정 적용
- rollback_and_replay() 함수 구현 (예측 입력 재적용)
- 로컬 예측 위치 (예: 파란 점)
- 서버 응답 위치 (예: 노란 점)
- 보정 적용 후 위치 (예: 빨간 점)
- 예측과 실제의 차이 시각화 (선 또는 텍스트)
- Player 구조 → 다중 플레이어 ID 지원
- ENet에서 클라이언트 세션별 상태 관리
- InputBuffer[player_id], State[player_id] 구조화
- 룸 구조/샤딩은 추후 고려
📦 보너스: 기술 스택 정리
| 역할 | 기술 | 설명 |
|---|---|---|
| 클라이언트 | Pygame | 키 입력, 이동, 시각화 |
| 통신 | PyENet | ENet UDP 통신 |
| 서버 | PyENet (단일 스레드) | 입력 수신 → 위치 응답 |
| 구조화 | tick, InputQueue, StateQueue | 예측과 보정 기반 |
🗂️ 전체 마일스톤
| 단계 | 설명 | 상태 |
|---|---|---|
| 1단계 | 오프라인 예측 구조 구현 | ⬜ |
| 2단계 | ENet 서버 만들기 | ⬜ |
| 3단계 | 클라 ↔ 서버 동기화 | ⬜ |
| 4단계 | 보정 시각화 + 디버깅 | ⬜ |
| 5단계 | 멀티유저 구조 확장 | ⬜ |