이 세상엔 두 부류의 인간이 있다. 한 부류의 인간은 자기 길을 가는 인간이고, 다른 한 부류의 인간은 그 길을 가는 사람에 대해 말하며 사는 인간. -- 니체
네트워크상에서 플레이어가 같은 데이터를 얻는 방법 #
프레임 정보를 전달하는 것이 바로 여러분이 필요한 모든 네트워크 트래픽이다.
클라이언트/서버 상황에서는 모든 I/O메세지가 서버로 전달된다. 그리고 그 서버는 모든 클라이언트에게 메세지를 전송한다. 이렇게 함으로써 I/O동기를 맞추고, 게임이 멈추지 않고 계속 진행될 수 있도록 한다.
확실히 게임상에서는 모든 것이 예측가능하고 모든 유닛의 정보도 전달되게끔 만들자. 난수는 항상 같은 방법으로 생성되며, 게임시작전에 모든 seed값이 모든 클라이언트에게 전달된다. 이러한 방법으로 네트워크상의 모든 컴퓨터에게 똑같은 랜덤 숫자가 만들어지기 때문에 모든 데이터를 항상 전송할 필요가 없는 것이다.
또한, 인터넷 접속도 초당 5K 바이트정도면 충분하다. 어떤 사람들은 초당 수백킬로바이트를 전송할 수 있는 T1라인을 사용할 수도 있지만, 대부분의 게이머들이 그런 회선환경을 가지고 있을 수는 없다. 모든 게이머들이 케이블 모뎀을 가지고 게임을 하기전까지는 초당 5K바이트 정도로 데이터의 양을 제한하는 것이 가장 좋은 방법이다. 이것을 30프레임으로 나누면 프레임당 약 170 바이트 정도된다.
TCP/ IP상에서 모든 패킷은 24바이트의 오버헤드를 가지고 있다. 가장 좋은 방법은 5프레임 동기 메세지를 전송하는 것이다. 서버는 메세지를 매 5 프레임때마다 각각의 클라이언트에게 전송하는 것이다. 클라이언트에서는 데이터가 올 때까지는 그리기를 건너 뛰는 것이다. 그리고 I/O 메세지가 올때까지 기다렸다가 갱신하는 방법을 취하면 된다. 만약 클라이언트 컴퓨터가 3회 이상 동기를 기다리면서 멈추어 있다면 속도가 느린 컴퓨터이거나 접속상태가 좋지 않을 경우이므로 게임에서 드롭시킨다.
이렇게 "5프레임 대기 방식"은 이런 경우에는 두드러질 정도의 멈춤 현상을 일으키며, 부드러운 게임 진행에 방해가 된다. 그러므로 현저하게 느린 플레이어는 드롭시키는 것이 가장 좋은 방법일 것이다.
약간더 덧붙이자면, I/O 메세지는 매프레임때마다 갱신을 해주어야 한다. 이러한 I/O메세지는 서버로 전달되어 다시 각 클라이언트로 재전송된다. 어떠한 클라이언트도 서버가 응답하기 전까지는 움직이지 않아야 하며, 만약 메세지를 드롭하였다면 다시 메세지 전송을 요구하도록 한다. 어떤 게임도 서버로부터 신호가 없이는 진행할 수 없다 이러한 방법은 네트워크 상에서 메세지를 분실했을경우(UDP에 해당) 서버는 클라이언트에게 다시 메세지를 전송하게 된다. 초당 2K바이트로는 "5프레임 동기 메세지"와 I/O메세지만으로 네트워크 트래픽을 거의 다 사용하게 된다. 여러분이 게임의 퍼포먼스를 높이기를 원한다면 매 3 프레임마다 sync메세지를 보내면 된다. 만약 데이터 전송량이 적거나, 네트워크 속도가 충분히 빠르다고 생각되면 2프레임마다 sync메세지를 전송해도 상관없다. 하지만, 때로는 플레이어끼리 텍스트 메세지를 주고 받는다는 것을 잊지 말자.
이것을 요약하면 다음과 같다.








![[http]](/wiki/imgs/http.png)
