강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

cnznsh님의 프로필 이미지
cnznsh

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part9: MMO 컨텐츠 구현 (DB연동 + 대형 구조 + 라이브 준비)

결론

모바일 데이터 환경에서의 렉 현상 문의 드립니다.

작성

·

14

·

수정됨

0

안녕하세요 루키스님, 잘 지내고 계시는지요?

 

프로젝트를 하러 떠나간다라고 글을 남긴게 2월24일 쯤인 것 같은데, 어느 덧 출시를 앞두고 있네요. 어찌저찌 구글 비공개 테스트까지 진행중에 있습니다 하하.. 다름이 아니라 최근에 예상치 못한 이슈가 하나 발생하였는데, 어찌 해결해야 될 지 도저히 방법을 찾지 못해서 문의 드립니다.

 

 

실시간 사냥터에서의 캐릭터 움직임|전투 로직이 와이파이 환경에서는 꽤 원활하게 잘 이루어지는데, 와이파이를 끄고 모바일 데이터(네트워크) 환경으로 게임을 진행하면 캐릭터가 너무 '뚝 , 뚝' 거리면서 움직이더라구요. 뭔가 모바일 데이터 환경에서는 네트워크 통신 환경이 공유기 와이파이 잡아서 하는것보다는 불안정하고 속도도 느리니까 이런 현상이 발생하나 싶어서 GPT + 인터넷 자료들을 찾아보았습니다.

서버와 클라 양 쪽의 소켓 옵션에서 socket.NoDelay = true; 을 켜주기도 하고, 서버 쪽에서 패킷 모아 보내기 Flush 틱도 10ms 정도로 줄여도 보고 했는데 끊김 현상이 크게 나아지지는 않더라구요ㅠㅠ.

 

사냥터에서 이루어지는 이동/스킬 패킷 같은 경우에는 UDP 프로토콜로 진행하고, 그외에 실시간성이 과하게 요구되지 않거나 신뢰성이 더 커야 되는 것들(채팅,아이템 구매, 판매 등)은 TCP로 진행하라라는 조언도 있기는 한데 정말 이게 유일한 방법인가 싶습니다..

 

의외로 간단한 건데 제가 제대로 못 찾고 있는 것인지, 아니면 정말 UDP / TCP 두 프로토콜을 같이 써가면서 네트워크 통신을 하여야 이 문제를 해결할 수 있는 건지,, 왠만하면 선생님께 문의 드리지 않고 혼자 해결해 보려고 했는데 도저히 그럴싸한 답들을 찾지 못해서 부득이 문의 드려봅니다! 감사합니다.

 

 (아 참고로 서버는 OCI -> 오라클 리눅스에서 실행하고 있습니다.)

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

사실 정확히 게임을 어떻게 구현하셨는지에 따라 다를 수 있지만,
현재 샘플 게임은 칸 단위로 움직이는지라 조금이라도 렉이 걸리거나 요청에 대한 응답이 늦어지면
부드럽지 않게 뚝뚝 움직이는 현상이 일어납니다.
일반 3D 기반의 게임이었다면 목적을 찍고 어차피
클라가 내부적으로 보정 처리를 하니 티가 안 났겠지만요.

UDP/TCP 문제는 확실히 아닌 게, 실제 모바일 MMO도 TCP 원툴로 많이 만들기도 합니다.
- 모아 보내기 위해서 10ms 정도로 최소틱을 두고 돌리는 부분을 제거하고 최대한 빨리 보내보거나
(M2 때는 그렇게 했던 기억이...)
- 아니면은 도착하기 이전에 (가령 50% 칸 이동을 했으면) 서버에 이동 요청을 보내거나
등의 다른 방법을 생각해보는 것이 좋습니다.

0

안녕하세요, 인프런 AI 인턴입니다. cnznsh님, 게임 출시를 앞두고 계신다니 축하드립니다! 모바일 환경에서의 네트워크 성능 이슈는 많은 개발자들이 겪는 공통된 문제입니다. 이러한 문제를 해결하기 위해 몇 가지 고려해볼 수 있는 포인트를 안내드리겠습니다.

  1. 네트워크 환경과 프로토콜 사용:

    • 모바일 데이터 환경은 와이파이보다 불안정하고 지연 시간이 길 수 있습니다. UDP 프로토콜은 속도 면에서는 유리하지만, 데이터가 유실될 가능성이 있습니다. 중요한 데이터나 손실되면 안 되는 정보는 TCP로, 빠른 실시간 처리가 필요한 패킷은 UDP로 관리하는 것이 좋은 방법이 될 수 있습니다.
  2. 네트워크 최적화:

    • socket.NoDelay = true 설정은 TCP에서 Nagle 알고리즘을 비활성화하여 모든 패킷을 즉시 전송하지만, 패킷의 수가 증가하여 오히려 네트워크에 부담을 줄 수 있습니다. 상황에 따라 이 설정을 조정하거나, 패킷 크기를 조정해 보세요.
    • 서버에서의 Tick 조절뿐 아니라 클라이언트에서도 패킷 전송 주기를 적절히 조절해보세요. 너무 자주 전송하면 오히려 끊김이 더 심할 수 있습니다.
  3. 모바일 환경 테스트:

    • 다양한 모바일 네트워크 환경에서 테스트를 진행해 보세요. 네트워크 속도가 느리고 불안정한 환경에서도 게임이 원활히 작동하는지 확인하는 것이 중요합니다.

아래는 유사한 질문과 답변 링크입니다. 더 많은 인사이트를 얻으실 수 있을 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cnznsh님의 프로필 이미지
cnznsh

작성한 질문수

질문하기