javascript - 使用节点 js websockets 实时显示温度
问题描述
我有温度传感器 ds18b20 并且我成功读取了读数,如何在温度变化时将此值发送给连接的客户端。
socket.emit('Temperature', TempValue() );
使用connection
它只执行一次,我需要不断地向客户端发送这将显示在 HTML 页面上。
解决方案
我有一个有点类似的系统,它基于几个温度传感器控制阁楼风扇。我要做的是:
- 我使用
setInterval()
读取温度传感器的服务器本地轮询间隔。此间隔独立于任何连接,它是服务器代表所有连接执行的操作。 - 当应用程序第一次启动时,第一个温度被发送到任何连接的客户端,我存储了我上次发送的那个温度值。
- 然后在下一个轮询循环中,我将新的当前温度值与我发送的最后一个温度值进行比较。当这两个值相差某个预定量时,我会向所有连接的客户端广播一个新的温度值,
io.emit()
并将刚刚发送的新值保存为新的比较值。 - 如果它们没有足够的差异,那么我不会发送任何东西,也不会保存新的温度并继续检查每个轮询间隔,等待温度值差异到足以保证将其发送给客户端。
通过这种方式,我只在它实际上与之前的值有足够的差异并且值得使用一些带宽发送时才向客户端发送一个新的温度。
推荐阅读
- python - Google 助手:无法打开文件“google-oauthlib-tool”:[Errno 2] 没有这样的文件或目录
- javascript - 不明白为什么 map() 不是函数
- c# - 有没有办法改进脚本?现在它在 StartCoroutine 中做 StartCoroutine
- laravel - 如何在迁移和 Eloquent 中设置具有不同用户职位的团队?
- c - 如何使用 Gitlab CI .yml 文件打印 Hello World
- css - 即使向下滚动也始终显示 Flash 消息
- tensorflow - TensorFlow Serving 交叉列奇怪的错误
- vhdl - 等待输入状态改变开始进程
- java - IntelliJ 无法找到或加载主类远程信息处理.GetTelematicsData
- c - 由于 cscanf() 和 cprintf() 程序无法编译