Node.js CPU问题/优化
Node.js CPU issue/Optimization
我和我的朋友正在制作一款node.js游戏,我们一直在测试cpu,但在分析这个名为zlib的过程后,它正在吸收大部分cpu/RAM
3个客户端连接到一个游戏是可以的,但是当12~13个玩家连接时,它使用58%,而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。这是我们的socket发送大部分数据的部分。
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
额外:检查用户的格式已经在https://codereview.stackexchange.com/questions/107922/node-js-cpu-issue的StackExchange上回答了。我们只是需要帮助,如果有任何方法来减少zlib的cpu占用。
谢谢。
zlib是一个广泛使用的压缩库。您看到大量CPU占用的最可能原因是大量压缩的网络流量。这是可取的,因为CPU通常比网络流量"便宜"。其他可能大量使用zlib的领域可能是通过node.js的zlib
模块加载磁盘上的压缩文件,或者如果你正在做PNG图像的服务器端解压缩,这也通常使用zlib。
如果您发现zlib 'tax'对于您的特定应用程序来说太多了,也许您可以将解压缩卸载到另一个进程。您可以在主服务器前面使用一些node.js服务,其目的纯粹是连接到客户端。然后让它们以未压缩的"原始"格式与服务器对话,这样服务器更容易理解。
你没有提到这是否真的给你带来了问题。我现在还不用担心。这种单进程可伸缩性是使用node.js的一个缺点,唯一的解决方案是将你的服务分成更小的部分,可以分布在多个核心甚至多个服务器上。
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- TableExport jquery插件:文件名和扩展名问题
- JavaScript Pub/Sub属性访问问题
- JavaScript异步问题
- 在 JavaScript 中优化迭代深化尖峰小时算法时遇到问题
- 功能和优化方面的问题
- Require js优化器相对路径问题
- Node.js CPU问题/优化
- Javascript优化:V8和IE的问题
- Parallel.js/WebWorker和优化代码的问题
- Require.js优化器-运行时出现问题
- 一页上有多个画布.优化问题
- 我遇到过的最奇怪的虫子.可能存在V8优化问题
- Javascript正则表达式匹配模式,但不匹配正则表达式文本(r.js优化器和uglify问题)