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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!