nodejs redis socketIo

 

后台java在数据变化时将数据存入redis服务器,前台通过node和redis进行响应,使用socket.io更新浏览器数据。

一、本地开发测试安装redis服务器

redis官网 windows 64位地址

1.将zip压缩包解压,cmd进入,输入 redis-server redis.windows.conf 运行redis服务器

2.redis 命令行工具(redis-cli),双击打开,输入help查看指令

3.在项目目录下安装redis (cnpm i redis --save)

二、在node里面配置config.js

/*
 * config
 */
var  options = { RDS_PORT : '6379', //端口号 RDS_HOST : '127.0.0.1', //服务器IP 要连接的A服务器redis RDS_PWD : '', //密码 RDS_OPTS : {}//设置项 }; module.exports = { options:options }

三、app.js

const redis = require("redis"); const options = require("./config"); const redisclient = redis.createClient(options.RDS_PORT,options.RDS_HOST,options.RDS_OPTS); var server = require('http').Server(app);

四、配置reids

redisclient.on('connect',function(){ console.log("redis connect success"); //订阅频道DIEW redisclient.subscribe("DIEW"); });

//我在做这个demo时是通过ajax来调用commit,然后写入redis,redis就进行发布,接着会触发redis的订阅,读取redis中的数据,通过socket.io发送到客户端
//写入redis
router.all("/commit",function(req,res,next){ var commits = JSON.stringify(req.query.data); var name = req.query.data.name; redisclient.set("bidinvest",commits,redis.print); redisclient.publish("DIEW",commits); })
五、连接socket
io.on('connection', function(socket) { redisclient.on('message', function(error, msg) { console.log('socketIo connection'); socket.emit('DIEWMSG', msg); }); })
六、客户端代码
//init socket
	var socket = io.connect('http://127.0.0.1:3000/'); //socket connection socket.on('connection', function() { console.log('connection setup for socket.io') }); //socket 订阅的频道 socket.on('DIEWMSG', function(msg) { var objMsg = JSON.parse(msg); var random = parseInt(Math.random()*6)+1; //返回的数据 var html = ''; html+='<li class="row list-group-item"><div class="col-md-2 col-xs-12">'; html+='<img src="/images/avatar/avatar0'+random+'.jpg" alt="llalalalla" class="img-thumbnail text-center avatar">'; html+='<p class="text-center">'+objMsg.name+'</p></div>'; html+='<div class="col-md-10 col-xs-12">'; html+='<p>'+objMsg.txt+'</p></div></li>'; $(".commit-all").append(html); })
注:源码请移步github https://github.com/dai1254473705/node-socket-redis
总结:这只是一个简单的demo,如果需要更多的功能可以到socket.io(https://socket.io/docs/)和redis(https://github.com/NodeRedis/node_redis)上查看文档,
比如设置socket.io连接node端的权限认证,传入参数等等,如果线上服务器使用了nginx,需要ip_hash;保证连接的是同一个端口;如果放到线上环境,
var socket = io.connect('http://127.0.0.1:3000/');可以直接写 var socket = io();这样会自动识别链接地址,默认transports是websocket,如果链接不成功会自动改为轮询机制,如下图:

但是本地开发的时候没有这个问题,只有在线上环境才遇到(线上环境socket和redis相对复杂,但是问题相同),不知道是nginx还是其他方面的问题,知道的大牛可以出来普及知识了

 

 

 
 

转载于:https://www.cnblogs.com/DIEW/p/7434896.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值