在服务器端,checktemps.js会循环遍历(大约每隔两秒)我(MySQL)数据库中的所有位置,并检查相应的温度。然后,它将此数据存储在checktemps.js内的数组中。
这是极其低效的。您不应该这样做循环(每隔两秒或更短时间)。
模块
下面我将尝试列出我将使用的模块(包括node.js模块和其他模块),以使其更有效率:
npm 是 Node.js 的包管理器。您可以使用它来安装和发布您的 Node.js 程序,它可以管理依赖关系并执行其他酷炫的功能。
我真诚地希望您已经了解 npm,如果没有,我建议您尽快学习它。一开始,您只需要学习如何安装软件包,但这非常容易。您只需要键入 npm install <package-name>
。稍后,我真的希望您学会编写自己的包以管理依赖关系。
Express 是一个高性能、高级别的 Web 开发框架,适用于 Node.js。
TJ 的这个 Sinatra 风格的框架真的很棒,你应该阅读文档/观看可用的 screencasts 以了解它的强大功能。
Socket.IO 旨在使实时应用程序在每个浏览器和移动设备中都成为可能,消除了不同传输机制之间的差异。
Redis 是一个开源的、先进的键值存储系统。由于键可以包含字符串、哈希、列表、集合和排序集,因此它经常被称为数据结构服务器。
就像 Raynos 所说的那样,这个极快/性感的数据库具有 pubsub 语义,这是高效地处理您的问题所需的。我认为您应该真正玩一下这个数据库(tutorial) ,以欣赏它的原始功能。安装起来也很容易:make install
Node_redis 是一个完整的 Redis 客户端,适用于 node.js。它支持所有 Redis 命令,包括 MULTI、WATCH 和 PUBLISH / SUBSCRIBE。
原型
我刚刚想起我曾经帮助过另一个用户解决有关 pubsub的问题。我认为当您查看那个答案时,您将更好地了解如何正确执行它。代码已经发布了一段时间,并且应该进行更新(在express方面进行了微小的更改):
var PORT = 3000,
HOST = 'localhost',
express = require('express'),
io = require('socket.io'),
redis = require('redis'),
app = module.exports = express.createServer(),
socket = null;
app.use(express.static(__dirname + '/public'));
if (!module.parent) {
app.listen(PORT, HOST);
console.log("Express server listening on port %d", app.address().port)
socket = io.listen(app);
socket.on('connection', function(client) {
var subscribe = redis.createClient();
subscribe.subscribe('pubsub');
subscribe.on("message", function(channel, message) {
client.send(message);
});
client.on('message', function(msg) {
});
client.on('disconnect', function() {
subscribe.quit();
});
});
}
我已经将更新后的代码和所有依赖项压缩在一起
compressed,但你仍需要先启动Redis。
问题
希望这能给你一个实现的思路。