gpt4 book ai didi

javascript - Node.js CPU 问题/优化

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:25 24 4
gpt4 key购买 nike

我和我的 friend 正在制作一个 Node.js 游戏,我们一直在测试 cpu,但在分析这个名为 zlib 的进程后,它占用了大部分 CPU/RAM

3 个客户端连接到一个游戏就可以了,但是当连接 12~13 个玩家时,它会使用 58% 的 CPU,而 zlib 会使用大约 30% 的 CPU。

inclusive      self           name
ticks total ticks total
64775 58.5% 64775 58.5% /lib/x86_64-linux-gnu/libc-2.19.so
25001 22.6% 224 0.2% LazyCompile: *callback zlib.js:409
//this one is a different zlib
7435 6.7% 82 0.1% LazyCompile: ~callback zlib.js:409

有什么办法可以减少CPU的使用吗?或者有什么原因让它增加这么多。

我已经阅读了一些内容,并被告知它来自 socket.io,所以这是我们发送大部分数据的套接字部分。

for (var i = 0; i < users.length; i++) {
if (u.room == users[i].room && users[i].x + users[i].radius >= u.x - u.screenWidth / 2 - 20 && users[i].x - users[i].radius <= u.x + u.screenWidth / 2 + 20 && users[i].y + users[i].radius >= u.y - u.screenHeight / 2 - 20 && users[i].y - users[i].radius <= u.y + u.screenHeight / 2 + 20) {
if (users[i].id == u.id) {
visiblePlayers.push({
x: users[i].x,
y: users[i].y,
angle: users[i].angle,
hue: users[i].hue,
radius: users[i].radius,
squeeze: users[i].squeeze,
name: users[i].name,
dead: users[i].dead,
isPlayer: true,
kills: users[i].kills
});
} else {
visiblePlayers.push({
x: users[i].x,
y: users[i].y,
angle: users[i].angle,
hue: users[i].hue,
radius: users[i].radius,
squeeze: users[i].squeeze,
name: users[i].name,
dead: users[i].dead
});
}
// SEND DYING INFO: (FOR OFFLINE ANIMATION):
if (users[i].dying) {
visiblePlayers[visiblePlayers.length - 1].dying = true;
}
}
}
var visibleEnergy = [];
for (var i = 0; i < energies.length; i++) {
if (u.firstSend || (energies[i].updated && energies[i].room == u.room)) {
var anim = energies[i].animate;
if (u.firstSend)
anim = true;
visibleEnergy.push({
x: energies[i].x,
y: energies[i].y,
radius: energies[i].radius,
index: i,
animate: anim,
hue: energies[i].hue,
room: energies[i].room
});
}
}

// SEND PLAYER UPDATES TO CLIENTS:
sockets[u.id].emit('serverTellPlayerMove', visiblePlayers,
visibleEnergy);

Zlib 是问题之一,但是否还有其他优化方法来减少服务器 CPU。

额外:检查用户的格式已在 StackExchange 中得到解答,地址为 https://codereview.stackexchange.com/questions/107922/node-js-cpu-issue 。如果有任何方法可以减少 zlib cpu 使用率,我们只需要帮助。

谢谢。

最佳答案

zlib是一个广泛使用的压缩库。您看到大量 CPU 使用率的最可能原因是大量压缩的网络流量。这是可取的,因为 CPU 通常比网络流量“便宜”。其他可能大量使用 zlib 的区域是通过 node.js 的 zlib module 加载的磁盘上的压缩文件。 ,或者如果您正在对 PNG 图像进行服务器端解压缩,这也很常见 uses zlib .

如果您发现 zlib“税”对于您的特定应用程序来说太多,也许您可​​以将解压任务转移到另一个进程。您可以在主服务器前面使用一些 Node.js 服务,其目的纯粹是连接到客户端。然后让他们以未压缩的“原始”格式与您的服务器对话,您的服务器更容易理解。

您没有提及这是否确实给您带来了问题。我还不一定会担心它。这种单进程可扩展性是使用 Node.js 的一个缺点,唯一的解决方案是将您的服务分割成更小的部分,这些部分可以分布在多个核心甚至多个服务器上。

关于javascript - Node.js CPU 问题/优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33197024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com