멀티플레이어 서버
En Parlant~ 멀티플레이어 릴레이는 Axum과 socketioxide를 사용하여 Rust로 작성된 경량 WebSocket 서버입니다. Socket.IO를 통해 두 플레이어를 연결하여 실시간 체스를 가능하게 하며, 영구 저장소 없이 최소한의 리소스만 필요합니다.
릴레이 서버 소스 코드는 en-parlant-relay 저장소에 있습니다.
자체 호스팅을 하는 이유
섹션 제목: “자체 호스팅을 하는 이유”기본 릴레이 서버는 별도 설정 없이 바로 작동하지만, 자체 서버를 운영해야 할 좋은 이유들이 있습니다:
- 프라이버시 — 모든 게임 트래픽이 자체 인프라 내에서 유지됩니다
- 낮은 지연 시간 — 플레이어와 가까운 곳에 배포하여 더 빠른 수 전송이 가능합니다
- 독립성 — 기본 릴레이의 가동 시간이나 가용성에 의존하지 않습니다
배포 옵션
섹션 제목: “배포 옵션”Fly.io (권장)
섹션 제목: “Fly.io (권장)”릴레이 저장소에 fly.toml 설정 파일이 포함되어 있어 Fly.io가 가장 쉬운 배포 경로입니다. Fly.io의 무료 티어는 개인 사용에 적합합니다.
-
Fly CLI를 설치합니다:
Terminal window curl -L https://fly.io/install.sh | sh -
가입하거나 로그인합니다:
Terminal window fly auth signup# orfly auth login -
릴레이를 클론하고 배포합니다:
Terminal window git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relayfly launchfly deploy
Fly.io가 Rust 바이너리를 빌드하고 배포한 후 your-app-name.fly.dev와 같은 공개 URL을 제공합니다.
자체 호스팅
섹션 제목: “자체 호스팅”Rust 툴체인이 설치된 모든 머신에서 릴레이를 소스로부터 빌드하여 실행할 수 있습니다.
-
클론 및 빌드:
Terminal window git clone https://github.com/DarrellThomas/en-parlant-relay.gitcd en-parlant-relaycargo build --release -
서버 실행:
Terminal window ./target/release/en-parlant-relay서버는 기본적으로 포트 3210에서 수신 대기합니다.
-
프로덕션 환경에서는 TLS 종료를 처리하기 위해 리버스 프록시(nginx, Caddy 또는 유사 도구) 뒤에서 실행하십시오. 릴레이 자체는 일반 WebSocket을 사용하며, 프록시가
wss://암호화 계층을 추가합니다.
서버는 매우 경량입니다. 메모리에 게임 방을 유지하고 두 플레이어 간에 수를 전달하며, 그 외에는 아무것도 하지 않습니다. 소형 VPS나 Raspberry Pi에서도 충분히 운영할 수 있습니다.
En Parlant~ 설정
섹션 제목: “En Parlant~ 설정”릴레이가 실행되면 En Parlant~에서 해당 서버를 지정합니다:
- En Parlant~에서 Settings를 엽니다
- 멀티플레이어 릴레이 서버 URL 설정을 찾습니다
- 서버의 WebSocket 엔드포인트를 입력합니다:
- Fly.io의 경우:
wss://your-app-name.fly.dev - TLS 프록시가 있는 자체 호스팅의 경우:
wss://relay.yourdomain.com - 로컬 개발의 경우:
ws://localhost:3210
- Fly.io의 경우:
이것으로 완료입니다. 앱이 모든 멀티플레이어 게임에 해당 릴레이를 사용합니다.
서버 세부 사항
섹션 제목: “서버 세부 사항”릴레이 작동 방식에 대해 알아두어야 할 몇 가지 사항입니다:
-
방 코드 — 서버는 혼동 없는 문자 집합을 사용하여 6자리 게임 코드를 생성합니다. 유사하게 보이는 문자는 제외됩니다(
0/O,1/I/L없음). 이는 코드를 구두로 공유할 때 혼동을 방지하기 위함입니다. -
방 정리 — 30분 동안 활동이 없으면 방이 자동으로 제거됩니다. 60초마다 정리 작업이 실행되어 유휴 방을 정리합니다.
-
영구 저장소 없음 — 모든 상태는 메모리에 존재합니다. 서버가 재시작되면 활성 방은 사라집니다. 이는 의도된 설계입니다 — 릴레이는 무상태이며 간단하게 교체할 수 있습니다.
-
최소 리소스 — 서버는 CPU와 메모리를 매우 적게 사용합니다. 한 플레이어로부터 Socket.IO 이벤트를 수신하여 다른 플레이어에게 전달하기만 합니다. 게임 로직, 수 검증, 데이터베이스가 없습니다.