Ask Your Question
0

패킷 관련해서 문의드립니다.

asked 2019-05-28 17:26:11 +0900

xodbs gravatar image

안드로이드에서 클라이언트(유니티)가 백그라운드로 있을 경우 서버가 클라에게 패킷을 보냈을때, 패킷이 도달하지 않았기때문에 서버쪽 버퍼에 그대로 두고 있는건지, 아니면 클라이언트쪽에 패킷이 전송 완료 되었지만 클라이언트에서 처리를 못하고 있는 상태인지 문의드립니다.

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2019-05-28 17:37:45 +0900

Jinuk gravatar image

두 가지를 완벽히 구분할 방법은 없습니다. 두 가지를 구분하려면 패킷 캡쳐를 해서 실제로 전송했는지를 확인하셔야 합니다.

  1. 캡쳐결과 서버에서 보낸 메시지가 실제로 전송된 경우, 해당 메시지는 안드로이드 OS의 TCP 스택에서 대기하게 됩니다. (클라이언트가 백그라운드인 경우)
  2. 안드로이드가 충분히 많은 수의 메시지를 처리하지 않은 경우, TCP window가 부족해서 서버가 보내지 않는 경우도 가능합니다. (이 경우 패킷 캡쳐에서 서버가 메시지를 보낸 로그가 없습니다)

다만 위 두 경우 모두 클라이언트가 어느 쪽인지 스스로 인지하기는 어려우며, 구현 상으로도 별 차이 없을 것으로 보입니다.

어떤 이유에서 위 내용이 필요한지 알려주시면 답변드리기 쉬울 듯 합니다.

edit flag offensive delete link more

Comments

만약 2번 상황이라고 가정을 한다면 서버쪽 버퍼가 가득 차거나 메모리가 증가해서 게임 운영에 문제가 생기거나 하는 경우가 생길수 있을까요?

xodbs gravatar imagexodbs ( 2019-05-29 10:48:10 +0900 )edit

서버에서 무한정 메시지를 보내는게 아니라고 치면, 대부분의 경우 문제가 안될 정도의 양입니다. 게임 서버가 클라이언트 요청없이 보내는 메시지는 전체 전송하는 메시지나, 다른 클라이언트로 부터의 메시지며, 해당 양은 많아봐야 수십 - 수백 KiB 정도일 것으로 보입니다. 문제가 될 수 있다고 판단된다면 적절한 길이의 heartbeat (ping 기능 이용) 을 사용해서 해당 클라이언트를 구분하고 연결을 끊을 수 있을 것 같습니다.

Jinuk gravatar imageJinuk ( 2019-05-29 11:04:06 +0900 )edit

답변 감사합니다. /

xodbs gravatar imagexodbs ( 2019-05-29 11:41:30 +0900 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2019-05-28 17:26:11 +0900

Seen: 88 times

Last updated: May 28