问题描述
|
作为我昨天关于Node.js并与客户端通信的问题的跟进,我试图了解以下内容的工作方式。
案件:
所以,我有这个网站,内容经常更新。假设这一次,此内容是带有温度的位置的列表。 (是的,气象服务)
现在,每当客户检查某个位置时,他或她都会转到如下网址:
example.com/location/id
其中id
对应于我数据库中该位置的ID。
实现方式:
在服务器上,“ 2”循环(每隔一秒左右)遍历我(MysqL)数据库中的所有位置,并检查相应的温度。然后将其存储为checktemps.js
内的数组。由于温度会随时变化,因此必须继续检查数据库中的更新,这一点很重要。
当请求“ 0”时,“ 2”将查找具有id = id的记录的数组。然后,它以相应的温度响应。
题:
目前,纯文本,html或ajax调用均不相关。我只是好奇我是否有这个权利? Node.js是一件很不寻常的事情,所以我想弄清楚这是否合乎逻辑?
解决方法
在服务器上,checktemps.js循环
(每隔一秒钟左右)
我的(mySQL)数据库中的位置
并检查相应的
温度。然后存储此数据
是checktemps.js中的一个数组
这是极其低效的。您不应该进行循环(每隔一秒左右)。
模组
下面,我将尝试列出模块(将node.js模块与其他模块同时列出),以提高效率:
npm是节点的软件包管理器。您可以使用它来安装和发布节点
程式。它管理依赖关系并执行其他很酷的事情。
我衷心希望您已经了解npm,否则我建议您尽快了解。在开始时,您只需要学习如何安装软件包,但这非常容易。您只需要输入
npm install <package-name>
。稍后,我真的很建议您学习编写自己的软件包以为您管理依赖项。
Express是Node.js的高性能,高级Web开发。
TJ的这种sinatra风格的框架确实很不错,您应该阅读可用的文档/截屏视频以了解其功能。
Socket.IO旨在使各种浏览器和
移动设备,模糊了
不同之间的差异
运输机制。
Redis是开源的,高级的
键值存储。它经常被提及
作为数据结构服务器,因为
键可以包含字符串,哈希,
列表,集合和排序集合。
就像Raynos所说的那样,这个非常快速/性感的数据库具有pubsub语义,这是有效解决您的问题所必需的。我认为您应该真正使用此数据库(教程)来欣赏它的原始功能。容易安装:pie7ѭ
Node_redis是用于node.js的完整Redis客户端。它支持所有Redis命令,包括MULTI,WATCH和PUBLISH / SUBSCRIBE。
原型
我只是记得我过去曾帮助另一个用户解决有关pubsub的问题。我认为,当您查看该答案时,将会更好地理解如何正确执行此操作。该代码已经发布了一段时间,应该进行更新(快速更改):
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\'); // listen to messages from channel pubsub
subscribe.on(\"message\",function(channel,message) {
client.send(message);
});
client.on(\'message\',function(msg) {
});
client.on(\'disconnect\',function() {
subscribe.quit();
});
});
}
我已经压缩了包含所有依赖项的更新代码,但是您仍然需要首先启动Redis。
问题
我希望这能给您一个思路。
, 使用node.js,您可以做得更好。自网络开始以来,请求/响应的麻烦就体现在我们的脑海中。但是,如果您打开网站/应用程序且从未结束此调用,则只能执行一个ajax请求。现在,只要您有更新到客户端,node.js就可以发送数据。在youtube上搜索Introduction to Node.js with Ryan Dahl
(node.js的创建者),他在那里进行了解释。这样,您就可以进行实时更新,而不必始终由客户端执行请求。