2011-09-10 4 views
2

저는 MMO 게임을 만들었고 많은 사람들이 연결될 때 많은 지체가 있습니다. UDP 및 TCP 패킷을 사용하고 있습니다. TCP가 정말 잘 작동하는 것처럼 보입니다. UDP는 때때로 5 초의 지연 후에 나타납니다. 무엇이 이것을 일으킬 수 있습니까? MongoDB를 사용하고 클라이언트 당 초당 30 번 패킷을 전송합니다. 감사.UDP를 사용하는 데 막대한 지연이 있습니다. 왜?

+0

나는이 질문에 후속 질문을하고있다. 해결 됐어? 아래 답변 중 어느 것이 맞습니까? Thx –

답변

0

UDP 프로토콜은 패키지 제공에 대한 보증을 제공하지 않습니다. 그래서 당신 문제는 이것에 있을지도 모릅니다. http://en.wikipedia.org/wiki/User_Datagram_Protocol

+0

나는 그것을 검사했다. 그리고 그것은 모든 패킷이오고 있지만 5 초의 지연으로 보인다. 서버를 처음 시작할 때 모두 괜찮습니다. 2 시간 후 2 초. 5 시간 후, 5 초 지연 등 패킷의 전부 (대부분 .. ..)가오고 있지만 지연됩니다. – Eli

0

야생 추측 : UDP 패킷 수신 경로에는 메모리를 할당해야하며 해당 메모리가 누출됩니다. 패킷을 더 많이 수신할수록 메모리를 할당하는 데 더 오래 걸립니다.

0

내가 여기 추측하고있어,하지만 상황은 응용 프로그램이 UDP 패킷에 대한 폴링이라고 할 수있는 모든 N 밀리 초 (당신의 FPS (20)의 경우처럼, 다음 N는 50ms의 것).

이제는 PC가 많은 양의 UDP 패킷을 수신하고 운영 체제에 의해 쌓이게됩니다. 그런 다음 이러한 패킷을 폴링하면 사용자 나 운영 체제가 스택을 즉시 지우지 않습니다. 더 큰 스택은 더 큰 지연을 의미 할 수 있습니다.

나는 어떤 라우터라도 똑똑하고 UDP 패킷을 쌓아 올리려고 읽었다 고 생각한다. 그러나 나는 그것을 본 페이지를 찾을 수 없습니다.

여기 비슷한 질문을 게시했습니다

Router gets unresponsive when using UDP

과 위 불행하게도 나는 아직 그것을 해결하는 방법을 모른다, 내 현재의 이론 :)입니다. 네트워크에 폴링하는 대신 네트워크 요청에 즉각적으로 반응하는 별도의 스레드를 사용하여 각 n ms를 사용하는 것이 좋습니다.

관련 문제