2011-09-01 3 views
2

캔버스, 소켓 .io 및 노드 .js를 사용하여 간단한 멀티 플레이어 게임을 만들려고합니다. 다른 사람이 연결될 때까지 모든 것이 정상입니다 (다른 탭을 열고 게임을로드합니다). 그렇게되면 모든 것이 느려지고 결국 멈 춥니 다.다른 클라이언트 (새 탭)가 연결되면 내 멀티 플레이 자바 스크립트 게임이 느려지는 이유는 무엇입니까?

작동 방식 : 누군가 서버에 연결하면 서버는 소켓을 배열 개체에 저장하고 클라이언트와의 통신을 시작합니다. 클라이언트는 이름과 위치를 포함하는 객체를 보낸 다음 서버는 그 소켓 배열을 통해 연결되어있는 다른 모든 사람들에게 보냅니다. 클라이언트가 메시지를 받으면 데이터를 추출하고 위치를 기반으로 한 드로잉과 같은 작업을 수행 한 다음 10ms 내에 시간 제한을 설정하여 서버의 위치와 이름으로 응답합니다. 나가 말한대로 이것은 새로운 창 또는 탭을 열고 다시 연결할 때까지 계속되고 계속 작동합니다.

다른 클라이언트를 시작할 때 왜 느려 집니까? 여기에 코드입니다 :

server.js (이 코드의 단지 조각, 나머지는 socket.io 예에서입니다)는

io.sockets.on('connection', function (socket) { 
    socket.emit('init', {id: names[players.length], level: 5}); 
    socket.on('got', function (data) { 
      console.log("got"); 
      players.push(new Player(socket)); 
      socket.emit('update', {msg: "ks"}); 
    }); 

    socket.on('update', function (data){ 
      for (i = 0; i < players.length; i++) 
      { 
       players[i].socket.emit('update', {msg: data}); 
      } 
    }); 
}); 

Player = function(socket) 
{ 
    this.socket = socket 
} 

game.js

self.socket.on('init', function (data) { 
     self.pl = new self.Player(data.id, data.level); 
     console.log(self.pl.id); 
     self.defined = true; 
     self.socket.emit('got', { my: "data" }); 
}); 

self.socket.on('update', function (data){ 
     self.pars(data); 
      setTimeout(function(){self.socket.emit('update', {'pos': self.pl.pos, 'id': self.pl.id})}, 10);   
}); 
+0

그냥 제쳐두고, 제 2의 클라이언트를 사용합니다. 이 작업을 수행하기 위해 Firefox와 Chrome을 나란히 실행합니다. 문제가 계속 나타나면 실제로 문제가 있음을 제안합니다. –

+0

하지만 별도의 컴퓨터에서도이 작업을 시도해 보았지만 두 가지 브라우저를 사용하여 어떻게 해결할 수 있는지는 알 수 없습니다. 나는 그것을 시험해 볼 것이다, 팁에 감사드립니다. – corazza

+0

처음에는 속도가 느려지고 멈추어지면 재귀 오류처럼 들릴 것입니다 ... 실행하지 않아야하는 코드가 실행되는지 확인하십시오. –

답변

2

내 첫번째 생각 리소스 문제입니다. 로컬 컴퓨터에서 모두 실행되고있는 것으로 추측됩니다. 모든 리소스를 다 먹어 버릴 수도 있습니다.

이것은 CPU에서 연결까지 될 수 있습니다. 더 많은 정보 없이는 말하기가 어렵습니다.

코드는 클라이언트와의 연결을 유지하면서 전체 시간을 열어 둡니까?

+0

두 개의 그림과 녹색 배경으로 할 수 있다는 것을 의미합니까? 글쎄, 그게 문제가 되었길 바래요.하지만 슬프지만 별도의 컴퓨터에서 실행했는데 문제가 여전히 남아있었습니다! – corazza

+1

당신은 10ms마다 네트워크 통신을하고 있고 꽤 스트레스가 많습니다. 나는이 컴퓨터 (10ms마다 2 연결) 및 클라이언트 (10ms마다 1 연결) 서버를 처리하는 1 대의 컴퓨터를 추측하고있어. 나는 당신이 100ms까지 그것을 부딪 치면, 훨씬 더 나은 성능을 볼 수있을 것이다. – aepheus

+0

연결이 열려있는 것처럼 보이는 것처럼 나는 연결보다는 메시지를 말해야합니다. – aepheus

관련 문제