Node.JS中的实时TCP服务器

时间:2015-02-14 00:15:33

标签: node.js tcp

我在Node.JS中有一个TCP服务器。当我每秒钟超过1000个数据包时,一切都会延迟。

不仅是一个短暂的延迟,而是一个3-4秒的延迟。这对我的实时服务器来说非常糟糕。

那么,为什么会这样呢?我在接收和发送数据包时使用process.nextTick,但我仍有问题。

可能的设计问题:

这会尝试将数据包广播到该区域内的所有相关玩家。可能是循环正在占用处理?

        // TO BE REFACTORED
        var listOffset = packet.readUInt16LE(6); // the users to broadcast to
        var listSize   = packet.readUInt8(listOffset);
        var payload    = packet.slice(10, listOffset); 
        // broadcast
        while (listSize--) {
          var userNo = packet.readUInt16LE(listOffset + 1 + (listSize * 2));
          var client = Server.getConnection(userNo);
          if (client) client.send(payload);
        }

相关功能:

getConnection is this._connections[id]
client.send is this._socket.write(data)

1 个答案:

答案 0 :(得分:0)

为了查看事件循环是否被阻止或其他事情正在发生(例如垃圾收集或我不知道是什么),您可以测量事件循环时间。只需立即启动setImmediate(),然后使用process.hrtime()测量执行回调所需的时间。如果事件循环被长时间阻止,您将看到它使用此方法。 如果您发现循环时间低于10毫秒,则循环不是问题,您需要搜索其他内容。