【发布时间】:2018-02-25 09:48:37
【问题描述】:
我创建了一个 MEAN 堆栈应用程序,在网页上,这些是一个仪表板图标,可以改变颜色,因为它从后端数据库获取实时更新。为了实现这一点,我使用了 socket.io。客户端代码如下。
var socket = io();
setInterval(myfunction, 9000);
function myfunction() {
socket.on('realtime message', function (msg) {
if (msg == 'yes') { marker.setIcon({ url: imagered });}
else if (msg == 'almost') { marker.setIcon({ url: imageorange }); }
else { marker.setIcon({ url: imagegreen }); }
});
socket.emit('realtime message', 'get the temprature');
}
它每 9 秒向服务器发送一次请求。
var io = require('socket.io').listen(server);
io.on('connection', function (socket) {
console.log('a user connected');
socket.on('realtime message', function (msg) {
var flag = // get the value from Mongo DB
if (flag == 'yes') {
io.emit('realtime message', 'yes');
}
else if (flag == 'almost') {
io.emit('realtime message', 'almost');
}
else { io.emit('realtime message', 'no'); }
Mongo DB 需要一些时间来响应更新值,加上响应返回给客户端的时间,因此来自客户端的请求会在服务器上堆积。只有一个客户端访问服务器,性能很好,但是有3个客户端访问服务器,等待堆栈变大,性能开始下降很多(单个get请求需要5-10倍的时间)。 Wich 给我留下了以下问题需要回答:
- 满足此要求的最佳解决方案是什么?
- 多线程是不是类似于 Node JS 中的集群的解决方案?
- 还有比集群更好的多线程方法吗?
【问题讨论】:
-
我不明白你为什么将
setInterval与socket.io 一起使用? setInterval 似乎是套接字不需要的轮询解决方案!
标签: javascript node.js mongodb express mean-stack