前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建简易的物联网服务端和客户端-redis+websocket(二十五)

搭建简易的物联网服务端和客户端-redis+websocket(二十五)

作者头像
治电小白菜
发布2020-08-25 14:39:14
2.4K0
发布2020-08-25 14:39:14
举报
文章被收录于专栏:技术综合技术综合

大佬向我介绍了websocket的好处,我也查阅了一些资料,确实websocket比ajax等一些来说对于前端的资源消耗很低 感谢EarthChen的帮助 代码地址:https://github.com/ZZES-ZVD/websocket_idemo 2017.8.19

搭建简易的物联网服务端和客户端目录

redis+websocket

1.redis

1)介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

2)官网

https://redis.io/

3)相关说明

  • 官方没有支持windows,但是还是有大神,所以不用担心
  • redis具体操作可以查看菜鸟教程
  • nodejs下操作redis可以查看之前的文章

2.websocket

1)介绍

上知乎https://www.zhihu.com/question/20215561

就是一个新的基于TCP的连接协议

2)socket.io

Nodejs的websocket服务器框架

官网:https://socket.io/

3)socket.io安装

nodejs:

代码语言:javascript
复制
npm install --save socket.io

前端使用socket.io.js:

下载地址:https://github.com/socketio/socket.io-client/tree/master/dist 当然cdn推荐使用bootcdn

代码语言:javascript
复制
<script src="/socket.io/socket.io.js"></script>

3.具体数据传输方式

乱画的

4.tcp服务器

TCP服务器,通过与硬件建立TCP连接,接受硬件发送过来的json数据,将数据解析,随后更新到redis中

1)引入包

代码语言:javascript
复制
var net = require('net')
var redis = require('redis')

2)连接redis,ip+端口

代码语言:javascript
复制
var redisClient = redis.createClient({
    host:'localhost',
    port:6379
});

3)创建TCP服务器和连接Redis

代码语言:javascript
复制
net.createServer(function(socket){
    socket.on('data', function(data){

4)接受到数据,并存入redis

超时时间一定要设置,虽然每次都是更新数据,但是数据放在内存里还是不好,毕竟小霸王机

代码语言:javascript
复制
//解析TCP接受到的JSON数据
var text = JSON.parse(data.toString());
//将数据存入redis,键名为"hum"
redisClient.set("hum", text.hum, function(err, reply){
    console.log("set hum error:" + err);
})
redisClient.expire('hum', 50);//设置超时时间

5.配置socket.io

1)引入包

代码语言:javascript
复制
var app = require('http').createServer()
var io = require('socket.io')(app)
var redis = require('redis')

2)连接redis

和上面一样

3)设置端口

自己定,别冲突就好(标准端口一般是1-1024,大于1024的是应用程序可以自定义的端口)

代码语言:javascript
复制
app.listen(5000)

4)连接redis,建立websocket

代码语言:javascript
复制
redisClient.on('ready', function() {
    io.on('connection', function(socket) {
        //定时推送到前端,求助,还有其他方式吗?
        setInterval(function(){
            redisClient.get("hum", function(err, reply) {
                console.log("get tem error:" + err)//打印错误信息
                console.log("get the humdata: " + reply)//打印接收到的信息
                socket.emit('news', { reply })//推送信息
            })
        }, 10000)
    })
})

6.前端

我使用的是echarts图表 ,为了防止代码太多,我就用dom更新了

1)引入

代码语言:javascript
复制
<script src="http://cdn.bootcss.com/socket.io/2.0.3/socket.io.js"></script>

2)数据显示

代码语言:javascript
复制
<div>the data is <span id="humdata"></span></div>

3)与后台建立websocket通信

连接服务 -> 接受数据

代码语言:javascript
复制
var socket = io('http://localhost:5000')
socket.on('news', function(data) {
    //注意这里是`data.reply`,可以看后台,传过来的变量名是reply
    document.getElementById('humdata').innerHTML=data.reply;
})

7.结果

hum.gif

@治电小白菜20170819

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis+websocket
    • 1.redis
      • 2.websocket
        • 3.具体数据传输方式
          • 4.tcp服务器
            • 5.配置socket.io
              • 6.前端
                • 7.结果
                相关产品与服务
                云数据库 Redis
                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档