標籤:group tar 運行 本地 cmd 發布 簡單的 list tran
後台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發送到用戶端
//寫入redisrouter.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 socketvar 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還是其他方面的問題,知道的大牛可以出來普及知識了
nodejs redis socketIo