socket.io 集成到express4經過路由訪問io

轉載自 http://cnodejs.org/topic/564ed68ce4766d487f6fe460前端

最近在研究消息推送,試了好幾種方法:node

一、eventsource js支持,可是貌似IE是不支持的,不想搞特殊化,果斷排除express

二、faye 基於node能夠實現消息推送,方法很簡單,我也在本地作了個小例子成功了,杯具的是不知道如何集成到express,老是收不到消息。npm

三、socket.io 最後選擇了這個,實現了從服務端發消息到客戶端的目的。app

socket.io網上的文檔不少,原理也很簡單,由於DoraCMS是基於Nodejs+express4的,下面簡要說一下 socket.io 是如何整合到express4實現消息傳遞的,這裏介紹改動最小的方法: 一、安裝socket.iosocket

npm install socket.io --save

二、app.js最上面引入ui

var io = require('socket.io')();

三、app.js最下面加上事件監聽socket.io

//事件監聽 app.io = io; io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('notifyNum', function (data) { console.log(data.msg_count); }); });

四、修改 /bin/www,最後面加上代碼spa

var io = app.io; io.attach( server );

這裏就有個問題了,我想在用戶執行完某些操做後發送消息給前端,說白了就是,我想在route裏操做io,怎麼辦?code

五、app.js中修改路由引入,例如DoraCMS後臺的路由:

var admin = require('./routes/admin')(io);

六、/route下找到admin.js,修改一下路由寫法

var express = require('express'); var router = express.Router(); var returnAdminRouter = function(io) { //管理員登陸頁面 router.get('/getEvent', function(req, res, next) { io.sockets.emit('notifyNum', {msg_count: '100'}); res.end('success'}); }); ..... return router; }; module.exports = returnAdminRouter;

八、客戶端代碼

<script src="/socket.io/socket.io.js"></script> <script> $(function(){ // 初始化事件監聽 var socket = io.connect('http://127.0.0.1:81/'); socket.on('notifyNum', function (data) { console.log(data.msg_count); }); }) </script>
相關文章
相關標籤/搜索