当我向每个套接字客户端添加更多项目时,套接字连接ODDLY

时间:2017-06-14 18:55:03

标签: javascript node.js html5 sockets websocket

我正在制作一个简单的HTML5游戏,在套接字连接时,服务器发送一个初始化信息包,为每个客户端生成对象,特别是瓦片,播放器和misc对象列表。

当我调用 socket.emit(“init”,initPacket())时,发送的数据包将在客户端(在客户端上定义)实例化新的JS对象。

如果我的服务器只有1000个磁贴,那么现在对象被实例化了。但是,当我转到1001或1002个磁贴,或者更多时,服务器将生成initPacket,尝试通过上面的方法发出它,并以某种方式创建一个新的SOCKET ,并尝试在那上面调用 socket.emit(“init”,initPacket())。同样奇怪的是前一个套接字没有断开连接(因为我在用户断开连接时记录)。

以下是客户端连接和断开连接时应该发生的情况的屏幕截图VERSUS如果我的磁贴太多会发生什么:http://imgur.com/a/gJgot

具体导致无限循环?我假设降级initPacket所以它发送更少的数据会使它更好,但我需要先找到根本原因。

供参考,使用Node.js和socket.io作为websocket。每当我打开一个新的localhost到正确的端口号时,我都会打开一个新的客户端。

对于initPacket():

var initPacket = function () {
    var ret = {};
    var playerPacket = [];
    var tilePacket = [];

    for (var i in PLAYER_LIST) {
        var currPlayer = PLAYER_LIST[i];
        playerPacket.push({
            id: currPlayer.id,
            name: currPlayer.name,
            x: currPlayer.x,
            y: currPlayer.y
        })
    }


    for (var j = 0; j < TILE_ARRAY.length; j++) {
        for (k = 0; k < TILE_ARRAY[j].length; k++) {
            var currTile = TILE_ARRAY[j][k];
            tilePacket.push({
                id: currTile.id,
                x: currTile.x,
                y: currTile.y,
                length: currTile.length,
                color: currTile.color
            });
            count ++;
        }
    }

   
    ret['tilePacket'] = tilePacket;
    ret['playerPacket'] = playerPacket;
    
    return ret;
};

基本上,套接字发出一个字典,其中包含'tilePacket'键和每个图块的图块信息列表值。

TILE_ARRAY是一个2层的Tile对象数组,我在这里定义:

const entityConfig = require('./entityConfig');

function Tile(x, y) {
    var randomId = Math.random();
    this.id = randomId;
    this.x = x;
    this.y = y;
    this.owner = null;
    this.color = "#FFFFFF";
    this.health = 0;
    this.length = entityConfig.WIDTH / Math.sqrt(entityConfig.TILES);
}


module.exports = Tile;

编辑:澄清一下,如果我删除上面的 ret ['tilePacket'] = tilePacket; 行,服务器就不再循环套接字了。我已经记录了TILE_ARRAY for循环中的项目数,它给了我1024个项目,这是32 x 32,这是正确的。这里的播放器包在错误方面无关紧要。

0 个答案:

没有答案