gpt4 book ai didi

express - 使用express.js和socket.io构建推送通知系统的最佳方法

转载 作者:行者123 更新时间:2023-12-02 17:01:16 24 4
gpt4 key购买 nike

我正在将express.js和socket.io一起用于实时推送通知系统。工作正常,我分享了我在服务器端使用的一些代码

 var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(appconfig.webPort, function() {
console.log('server runing at ' + appconfig.webPort);
});

io.on('connection', function(socket) {
var id = setInterval(function() {
some database logic here to get data from database
socket.emit(data);
}, 5000);
});

我的问题是这段代码会增加服务器的负载吗?当我每隔几秒钟从数据库获取数据时。如果它有害,那么最好的方法是什么?

最佳答案

my question is does this code increase load on server ? as i get the data from database on every few seconds. if it is harmful , what is the best way of doing the same.

当然,它确实增加了负载。对于与服务器建立的每个 socket.io 连接,您都会启动一个单独的 5 秒间隔计时器,并且每次计时器触发时,您都会运行一个或多个数据库查询,然后将这些结果发送到该客户端。

如果您有 50 个连接的客户端,您将每 100 毫秒运行一次这些查询 (5000/50)。如果您有 1000 个连接的客户端,则平均间隔为每 5 毫秒。除了让您的数据库非常繁忙之外,您的服务器也会非常繁忙。如果您有数千个连接的客户端,扩展会迅速变得更糟。

如果您为每个客户获取相同的数据,那么您应该改变这样做的方式。每 5 秒对数据库进行一次查询,然后将相同的结果发送给所有客户端。这样的扩展性要好得多。

如果您可以完全避免轮询数据库并依靠某种事件触发器来检测更改,通常效果会更好。

关于express - 使用express.js和socket.io构建推送通知系统的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368960/

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