캔버스, 소켓 .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);
});
그냥 제쳐두고, 제 2의 클라이언트를 사용합니다. 이 작업을 수행하기 위해 Firefox와 Chrome을 나란히 실행합니다. 문제가 계속 나타나면 실제로 문제가 있음을 제안합니다. –
하지만 별도의 컴퓨터에서도이 작업을 시도해 보았지만 두 가지 브라우저를 사용하여 어떻게 해결할 수 있는지는 알 수 없습니다. 나는 그것을 시험해 볼 것이다, 팁에 감사드립니다. – corazza
처음에는 속도가 느려지고 멈추어지면 재귀 오류처럼 들릴 것입니다 ... 실행하지 않아야하는 코드가 실행되는지 확인하십시오. –