使用CloudMQTT进行Node JS实时文本更新
Node JS live text update with CloudMQTT
我有一个节点服务器连接到CloudMQTT并在app.js中接收消息。我有我的客户端web应用程序在同一节点服务器上运行,并希望在.ejs文件的其他地方显示我在app.js中收到的消息,我正在努力如何最好地做到这一点。
app.js
// Create a MQTT Client
var mqtt = require('mqtt');
// Create a client connection to CloudMQTT for live data
var client = mqtt.connect('xxxxxxxxxxx', {
username: 'xxxxx',
password: 'xxxxxxx'
});
client.on('connect', function() { // When connected
console.log("Connected to CloudMQTT");
// Subscribe to the temperature
client.subscribe('Motion', function() {
// When a message arrives, do something with it
client.on('message', function(topic, message, packet) {
// ** Need to pass message out **
});
});
});
基本上,您需要一种方法让客户端(带有EJS - HTML、CSS和JS的浏览器代码)接收实时更新。从客户机到节点服务基本上有两种方法:
-
客户端实例化的websocket会话
-
轮询方法
有什么区别?
在底层,websocket是全双工通信机制。这意味着您可以打开从客户机(浏览器)到节点服务器的套接字,并且它们可以在长时间的会话中以两种方式相互通信。优点是更新通常是即时的,而不必像轮询那样产生另一个HTTP请求的成本。缺点是它使用的套接字连接可能是长期存在的,而且任何服务器上通常都有一个套接字池,处理许多套接字的能力有限。有很多方法可以解决这个问题,但如果你很关心这个问题,你可能想要使用轮询。
轮询是你在服务器上设置一个端点的地方,客户端JS代码会不时地访问这个端点。该端点将返回更新后的信息。缺点是,你现在正在发出一个新的请求,以获得更新,这可能是不可取的,如果大量的更新预期通过,应用程序被期望以最及时的方式更新(大多数时间轮询是足够的)。好处是,您不需要在服务器上无限期地打开一个实时连接。
同样,有更多的优点和缺点,这些只是显而易见的。你决定如何实现它。当客户端从这些机制接收到数据时,您可以以任何合适的方式更新UI。
在服务器端,您需要一种方法来持久化来自CloudMQTT的信息。有多种方法可以做到这一点。如果你不关心内存消耗,并且可以在客户端暂时不需要旧数据的情况下丢弃旧数据,那么将其存储在常规javascript对象{}
的内存中可能是可以的。如果你确实关心在服务器重启/崩溃之间持久化数据(可能是最好的),那么你可以持久化到像Redis, Mongo这样的东西,如果你的数据本质上是关系型的,甚至是磁盘上的常规JSON文件(见fs.writeFile)。
希望这能帮助你朝着正确的方向迈出一步!
- 使用javascript html实时预览文本区域输入
- 实时协作富文本编辑
- jquery电子邮件提取器实时从文本区域
- 在来自Javascript中实时预览的文本中渲染Markdown
- 无法在实时服务器中发布富文本编辑器内容
- 文本的实时预览使链接在悬停时不会更改背景颜色
- 关于socket.io实时文本显示的问题
- JavaScript 从 1 个文本区域实时更新到多个文本区域
- 如何将在一个文本字段中输入的文本实时复制到多个文本字段
- 如何在我的php注释框中实时替换带有表情符号的文本
- 如何使用 ajax 实时搜索获取脚本文本框中的搜索值
- 我想要输入文本元素中的实时更改事件
- Titanium App (iOS) 中的实时文本区域字符数
- 如何通过此关键字检索实时文本框值和名称
- 将实时文本放入容器内
- 使用ajax创建在线实时文本编辑器
- 使用CloudMQTT进行Node JS实时文本更新
- 实时文本搜索jquery,错误的选择器
- 如何在javascript中拖动图像/元素时导致实时文本换行
- 实时文本聚焦