我和我的朋友正在使Node.js的比赛,我们一直在测试的CPU,但剖析这一过程被称为zlib的后吸大部分的CPU/RAMNode.js的CPU问题/优化
3个客户端连接到一个游戏是好的,但是当12〜13个玩家连接时,它使用58%,其中zlib使用该CPU的30%左右。
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是out问题之一,也是如果有其他优化方法来减少服务器的CPU。
额外:检查用户的格式已在StackExchange中以https://codereview.stackexchange.com/questions/107922/node-js-cpu-issue得到解答。如果有任何方法来减少zlib cpu的使用,我们只需要帮助。
谢谢。
使用lz4 ....... – YOU