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

时间:2016-04-02 03:49:39

标签: express push-notification socket.io push

我一起使用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);
 });

我的问题是这段代码会增加服务器上的负载吗?因为我每隔几秒就从数据库中获取数据。 如果它是有害的,做同样的最好的方法是什么。

1 个答案:

答案 0 :(得分:2)

  

我的问题是这段代码会增加服务器上的负载吗?因为我得到了   每隔几秒从数据库中获取数据。如果它是有害的,那是什么   做同样的最佳方式。

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

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

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

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