gpt4 book ai didi

javascript - Socket.IO 服务器性能和带宽使用

转载 作者:IT老高 更新时间:2023-10-28 22:03:28 26 4
gpt4 key购买 nike

我即将在本地计算机上托管一个小型套接字服务器,我想知道它将使用什么样的带宽。在大多数情况下,它一次连接的客户端不超过 50 个,但每周一次或两次它可以同时连接多达 5,000 多个客户端。但是,发送的唯一消息是偶尔向所有连接的客户端发送一条消息,没有额外的数据或任何东西。

服务器是否会导致其托管的计算机的性能显着下降或完全减慢我的互联网速度?

Server.js:

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')

app.listen(8001);

function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}

res.writeHead(200);
res.end(data);
});
}

io.sockets.on('connection', function (socket) {
socket.on('SendDefault', function(data) {
socket.broadcast.emit('GetDefault');
});
});

Client.js:

setTimeout( function( ){ 
socket = io.connect('[IP Address]:8001');
socket.on('GetDefault', function(data) {
DoStuff( );
);
} ); }, 10000 );

最佳答案

带宽量很大程度上取决于您要从服务器发送的数据量,以及客户端将发送的数据量。带宽使用情况还取决于您使用的 Socket.IO 传输方式以及应用程序的心跳间隔。

应用程序的性能影响还因您运行的应用程序类型以及您的机器和/或网络的性能能力而异。但是,无论您的计算机功能如何,5000 多个客户端都会对性能产生相当大的影响,除非您跨多个内核扩展应用程序。

我使用代理进行了一些测量。结果如下:

从客户端发出:socket.emit(event, args)

  • 如果未提供 eventargs,则向服务器发送 12 个字节。
  • 如果省略args,但提供event,则总大小为22字节,event的长度。
  • 如果提供了 argsevent,则遵循相同的规则,但结果可能会因 args 的数据类型而异。

从服务器发出:格式与客户端相同

  • 如果未提供 eventargs,则向客户端发送 8 个字节。
  • 如果省略args,但提供event,则总大小为17字节,event的长度。
  • 如果提供了 argsevent,则遵循相同的规则,但结果可能会因 args 的数据类型而异。

服务器到客户端的心跳:每个客户端每 25 秒

  • 来自服务器的 5 个字节
  • 9 字节的客户端响应

握手:每个客户一次

  • 来自服务器的 216 个字节
  • 来自客户端的 431 字节响应
  • 129 字节从服务器跟进

因此,对于超过 5000 个客户端的负载,握手至少需要 3.7MB,心跳需要 3KB/s,socket.emit() 至少需要 107KB 带宽。这些不是确切的数字,因为客户端可能会丢失数据、断开连接、需要重新连接等。

最终,您的网络可能会支持,但主要问题应该是您的网络必须处理的并发连接量。许多并发连接也可能是 CPU 密集型的,因此您应该考虑跨内核集群。还要记住 Socket.IO 服务器必须处理的心跳数量。对于 50 个并发用户,平均每秒 2 次心跳。在 5000 多个并发用户时,每秒 200 多个心跳,我认为这比网络密集型 (2.8KB/s) 更占用 CPU。

关于javascript - Socket.IO 服务器性能和带宽使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907591/

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