nodejs+express+socketio實現即時聊天系統初體驗
1.先把必要的npm包給裝好
要在socket中完成對session的認證先加上
parseCookie = require('connect').utils.parseCookie
MemoryStore = require('connect/middleware/session/memory');
把上面的所有npm包給裝好,還要裝socket.io 這是基本的
2.建立一個memory store的實例
var storeMemory = new express.session.MemoryStore({
reapInterval: 60000 * 10
});
3.為了在express中使用session我們要加上
app.use(express.cookieParser());
app.use(express.session({secret:'wyq',store:storeMemory}));
4.設置session(session的認證)
io.set('authorization', function(handshakeData, callback){ if(handshakeData.headers.cookie){ handshakeData.cookie = parseCookie(handshakeData.headers.cookie); var connect_sid = handshakeData.cookie['connect.sid'].split('.')[0].split(':')[1]; }else{ callback('cookie is not defined',false); } if (connect_sid) { storeMemory.get(connect_sid, function(error, session){ if (error) { callback(error.message, false); }else{ try{ if(typeof session.username != 'undefined'){ //這里一定要先判斷session.username,否則socket中的session一直為空 handshakeData.session = session; callback(null,true); }else{ callback('access die',false); } }catch(e){ callback(e.message,false); } } }); } else { callback('nosession'); } });
5.然后就是服務器端發送消息給客戶端
io.sockets.on('connection', function (socket){ var session = socket.handshake.session;//session var username = session.username; usersWS[username] = socket; var refresh_online = function(){ var n = []; for (var i in usersWS){ if(usersWS[i] != usersWS[username]){ n.push(i); } } io.sockets.emit('online list', n); } refresh_online(); socket.on('message',function(message){ socket.broadcast.emit('message',message); }) socket.broadcast.emit('system message', '【'+username + '】come back!!!'); socket.on('private message',function(to, msg, fn){ var target = usersWS[to]; if (target) { fn(true); target.emit('private message', username+'[sixin]', msg); } else { fn(false) socket.emit('message error', to, msg); } }); });
6.客戶端需要處理的事情
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!