2009-12-12 6 views
0

안녕하세요, Iv'e는 패킷을 보낼 때 (버퍼에있는 데이터를 수집하고 보내면) 바이트 단위로 패킷을 보내는 것보다 속도가 느리다는 것을 알았습니다. 이 방법을 사용하여 온라인 게임을 만들면 괜찮습니까?네트워킹 방법

+0

현명한 답변을 제공하려면 더 자세한 내용을 제공해야합니다. 즉, "느린"의미는 무엇입니까? 전체 시스템의 전반적인 응답 시간입니까? – jldupont

답변

0

나는 당신이 당신의 측정 포인트 (당신이 정확히 무엇을 측정하고 있는지)를 정의 할 필요가 있다고 생각합니다. 그건 그렇고이 TCP 또는 UDP 무엇입니까?

어쨌든 Winsock에는 setsockopt을 호출하여 수정할 수있는 자체 내부 버퍼가 있습니다.

0

이상하게 들립니다. 바이트 단위로 데이터를 전송하는 데 더 많은 오버 헤드가 있습니다. 전송 헤더가 페이로드보다 훨씬 중요합니다! O (n) send 콜 (여기서 n은 바이트 수임)은 말할 것도 없습니다.

당신이 겪고있는 일이라면 뭔가 잘못하고있는 것입니다.

+1

느려짐은 아마도 데이터를 수집하는 것이 아니라 데이터를 수집하는 것일 수 있습니다. –

+0

아마도 그는 느린 부분을 언급하지 않았습니다. 바이트 단위로 보내는 것은 거의 해결책이 아닙니다. –

0

나는 실제로 아무 것도 측정하지 못했지만 데이터를 보내고 수집하지 않는 것과 관련이 있다는 것을 확신합니다. 클라이언트 측에서 서버 측과 C++ 용으로 C#을 사용하고 있습니다. 서버 측 BinaryWriter 및 BinaryReader를 사용하여 소켓을 래핑했고 클라이언트에서 방금 send 및 recv를 사용하여 모든 바이트를 보냈습니다.

+1

기본 질문을 수정하여 추가하십시오. –

1

소리와 관련된 문제와 같습니다.

대기 시간이 요구되는 응용 프로그램에 대한 애매한 말투를 사용 중지해야합니다. (setsockopt, TCP_NODELAY를 보라).

설명 :

TCP 스택은 데이터 그램을 IP하는 방법에 bizare 방법으로 그들을 결합하려고 작은 덩어리 다르게 동작합니다. 이는 J.Nagle이 제안한 성능 최적화입니다 (그러므로 nagling). NODELAY를 활성화하면 모든 send() 호출이 커널 모드로 전환되므로 메모리 복사를 통해 스트림을 청크로 묶은 다음 성능이 문제가되는 경우 send()로 전달하기를 원할 수 있습니다 하고있다.

+1

이 동작을 "기괴한"이라고 생각해서는 안됩니다. – jldupont

+0

"bizarreness"는 가정에 있습니다. TCP 끝에는 인간이 있습니다. 텔넷은 옛날 커뮤니케이션에서 중요한 부분을 차지했습니다. 나는 이것이 디폴트가되어서는 안된다고 생각한다. 위험한 함정입니다. 많은 시간이 중요한 시스템이 떨어지는 것을 보았습니다. –