搭建简易的物联网服务端和客户端-redis+websocket(二十五)
大佬向我介绍了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)相关说明
2.websocket
1)介绍 上知乎https://www.zhihu.com/question/20215561 就是一个新的基于TCP的连接协议
2)socket.io
Nodejs的websocket服务器框架
3)socket.io安装 nodejs:
npm install --save socket.io
前端使用socket.io.js
:
下载地址:https://github.com/socketio/socket.io-client/tree/master/dist 当然cdn推荐使用bootcdn
<script src="/socket.io/socket.io.js"></script>
3.具体数据传输方式
乱画的
4.tcp服务器
TCP服务器,通过与硬件建立TCP连接,接受硬件发送过来的json数据,将数据解析,随后更新到redis中
1)引入包
var net = require('net')
var redis = require('redis')
2)连接redis,ip+端口
var redisClient = redis.createClient({
host:'localhost',
port:6379
});
3)创建TCP服务器和连接Redis
net.createServer(function(socket){
socket.on('data', function(data){
4)接受到数据,并存入redis
超时时间一定要设置,虽然每次都是更新数据,但是数据放在内存里还是不好,毕竟小霸王机
//解析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)引入包
var app = require('http').createServer()
var io = require('socket.io')(app)
var redis = require('redis')
2)连接redis 和上面一样
3)设置端口
自己定,别冲突就好(标准端口一般是1-1024,大于1024的是应用程序可以自定义的端口)
app.listen(5000)
4)连接redis,建立websocket
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)引入
<script src="http://cdn.bootcss.com/socket.io/2.0.3/socket.io.js"></script>
2)数据显示
<div>the data is <span id="humdata"></span></div>
3)与后台建立websocket通信
连接服务 -> 接受数据
var socket = io('http://localhost:5000')
socket.on('news', function(data) {
//注意这里是`data.reply`,可以看后台,传过来的变量名是reply
document.getElementById('humdata').innerHTML=data.reply;
})
7.结果
hum.gif
@治电小白菜20170819
- 【插件开发】—— 2 插件入门
- 线程间通讯:WaitHandler使用实例及分析
- 域名Deskbike.com刚注册没多久就以五位数结拍
- 一起Polyfill系列:Function.prototype.bind的四个阶段
- winform实现拼图游戏
- 一起Polyfill系列:让Date识别ISO 8601日期时间格式
- Oracle 监听器无法启动(TNS-12537,TNS-12560,TNS-00507)
- Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)
- Python补充03 Python内置函数清单
- 不懂JQuery的孩子:自封装Ajax函数
- .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇
- 飓风“桑迪”路径图的制作
- 根据标准word模板生成word文档类库(开源)
- Oracle 监听器无法启动(TNS-12555,TNS-12560,TNS-00525)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Python基础】一文看懂 Pandas 中的透视表
- 彻底干掉恶心的 SQL 注入漏洞, 一网打尽!
- 某小型公司持续集成工具 Jenkins 实践
- 使用RBAC Impersonation简化Kubernetes资源访问控制
- 求求你别再用 MySQL offset 和 limit 分页了?
- 短视频带货源码,获取购物车中所有商品列表并加载显示
- 【Flutter 实战】菜单(Menu)功能
- 【Flutter 实战】路由堆栈详解
- 【Flutter 实战】全局监听路由堆栈变化
- 数据挖掘从入门到放弃:线性回归和逻辑回归
- 【Flutter 实战】文件系统目录
- 【原创】Spring Boot终极篇《上》
- 【原创】Spring Boot终极篇《下》
- 面试官:JDK、JRE、JVM 三者什么关系?
- 面试官:什么是面向对象?