nodejs redis socketIo

來源:互聯網
上載者:User

標籤: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.