我一起使用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);
});
我的问题是这段代码会增加服务器上的负载吗?因为我每隔几秒就从数据库中获取数据。 如果它是有害的,做同样的最好的方法是什么。
答案 0 :(得分:2)
我的问题是这段代码会增加服务器上的负载吗?因为我得到了 每隔几秒从数据库中获取数据。如果它是有害的,那是什么 做同样的最佳方式。
当然它会增加负载。对于对服务器进行的每个socket.io连接,您将启动一个单独的5秒间隔计时器,并且每次计时器触发时,您正在运行一个或多个数据库查询,然后将这些结果发送到该客户端。
如果您有50个已连接的客户端,则每100毫秒(5000/50)运行这些查询。如果您有1000个连接的客户端,则平均间隔为每5毫秒。除了让您的数据库非常繁忙,您的服务器也会非常繁忙。如果您有数千个连接的客户端,则扩展速度会变得更快。
如果您为每个客户获得相同的数据,那么您应该改变您的方式。每5秒对数据库进行一次查询,然后将相同的结果发送给所有客户端。这可以扩展得更好。
如果您可以完全避免轮询数据库并依赖某种事件触发器来检测更改,那通常会更好。