2013-07-29 2 views
1

게임을 만들었습니다. node.js에 업로드했습니다. 초당 30-60 프레임이어야합니다.
이제 테스트를 거쳐 천천히 실행됩니다. 로컬 네트워크가 더 원활하게 실행됩니다.
node.js와 함께 멀티 플레이어 게임 업로드

서버가 그렇게 멀리 있지 않습니다. 그렇다면 어떤 팁으로 fps를 개선하는 것이 좋습니까?

더 나은 것은 xhr-pooling 또는 websockets입니다. 무엇이 더 빠릅니까?
이 게임은 다음과 같이 XHR은 풀링으로 설정 -

io.set('transports', ['xhr-polling']); 

게임은 내가 게임 링크를 게시 할 수 있습니다 필요한 경우 appfog

에서 호스팅되는!

답변

3

여기에 문제가 무엇입니까? 서버가 모든 프레임에 대해 클라이언트에 메시지를 보내고 있다면 기본적으로 불가능하다고 말하는 것 - 인터넷을 통해 16 밀리 초 (60fps) 또는 33 밀리 초 (30fps) 미만의 네트워크 대기 시간을 보장하는 것은 불가능합니다. 로컬 네트워크에서 작동 할 수 있으며 로컬 시스템에서 작동 할 수 있지만 인터넷에서는 작동하지 않을 수 있습니다. 클라이언트에서 서버로 정보를 가져 와서 다음 프레임으로 되돌아 가야 할 경우 양방향 처리를 포함하여 왕복 대기 시간이 그만큼 짧아야합니다. xhr-polling과 websockets 모두 TCP를 사용하기 때문에 느린/손실 된 패킷 하나가 결국 이후에 모든 것을 일시 중지하기 때문에 결국 악화됩니다.

브라우저에서 실행 가능한 게임을 만들기 위해 가능한 한 많이 렌더링을 서버에서 분리해야합니다. 네트워크가 충분히 빠르지 않습니다.

+0

그래서 무엇을해야합니까? 게임 루프는 서버 대신 클라이언트에 있어야합니까? 하지만 사람들은 쉽게 해킹을 할 수 있습니다 .. – Israelg99

+0

열쇠는 서버가 "공식 상태"를 유지하도록하는 것입니다. 예를 들어, 나는 bazookaguys.com에서 일하는 것을 도왔습니다. (그냥 던져 버렸지 만 충분할 것입니다.) 누군가가 오른쪽 화살표를 누르면 클라이언트가 이동중인 서버에 알리고 클라이언트가이를 움직이게합니다. 나중에 서버가 클라이언트에게 사용자가 다른 곳에 있어야한다고 말하면 해당 위치로 점프합니다. 클라이언트는 권한이있는 것처럼 작동하지만 잘못 설정된 경우 서버에서 수정할 수 있습니다. 우리는 속임수에 대해 걱정할 필요가 없었기 때문에 클라이언트에서 탐지가 이루어졌고 버그가 가득 찼습니다 ... – korvus

+0

좋은 예가 [유성 프레임 워크] (http://www.meteor.com)는 대기 시간 보상을 수행합니다. 클라이언트에서 서버 측 데이터를 변경하면 서버는 서버가이를 확인하거나 거부 할 때까지 데이터가 변경된 것처럼 작동합니다. 따라서 서버를 여전히 권위자로 만드는 동시에 사용자가 느낄 수 있습니다. – korvus