最佳实践socket.io广播消息

目前我们正在尝试编写一个应用程序来对多个数据库环境(MSSQL,DB2,Oracle)进行健康检查。 已经编写了一个web服务来执行健康检查查询,该查询返回响应时间。

我认为,而不是一个Web客户端连接到Web服务来返回数据库状态,使用一个节点的socket.io服务器来运行web服务,并将结果推送到所有的webclient会更好,因为健康检查的开销数据库将是最小的(在50人同时使用web应用程序的情况下,每5秒钟只进行一次web服务调用,而不是同时进行50次web服务请求)。 这样,即使有一百万人在使用networking应用程序,数据库也不应受到任何影响。 (虽然会降低节点服务器。)

这是代码的套接字面。 我是新来的节点和套接字。 我的下一步是将结果logging在本地MongoDB中,并只广播更改(仅响应时间)而不是所有内容,以减lessnetworkingstream量并可能绘制历史结果。 我想知道是否有可能的socket.io断开连接,如果客户端有多个标签,它的浏览器和Web应用程序不是“聚焦”,并重新连接到一旦标签再次聚焦套接字。

只是想知道这是一个好方法还是有更好的方法来实现我的目标? 另外,将我的web应用程序放置在与节点套接字服务器相同的服务器中是否是一个好主意,或者将它们分开会更好?

var express = require('express') , http = require('http'); var app = express(); var server = app.listen(3030); var io = require('socket.io').listen(server); var allClients = []; io.sockets.on('connection', function(socket) { allClients.push(socket.client.id); console.log(allClients); socket.on('disconnect', function() { var i = allClients.indexOf(socket.client.id); console.log(allClients[i] + ' is disconnect!'); delete allClients[i]; allClients = allClients.filter(function(e){return e}); }); }); var CronJob = require('cron').CronJob; var job = new CronJob({ cronTime: "*/5 * * * * *", onTick: function() { var request = require("request"); request({ url: "dbhealthcheck.json", method: "GET", timeout: 10000, json:true, followRedirect: true, maxRedirects: 10, pool: false }, function(error, response, body) { sendUpdates(body); }); }, start: true }); job.start(); function sendUpdates(updates) { io.sockets.emit('updates', updates); }