多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > web前端 > jscript > 基于express+socket.io的nodejs聊天室

基于express+socket.io的nodejs聊天室

來源:程序員人生   發(fā)布時(shí)間:2013-11-18 23:09:35 閱讀次數(shù):3224次

前幾天晚上邊看水滸邊寫的nodejs的聊天室,前面說了,放假之前要把近日學(xué)習(xí)nodejs的所有心得整理下,今天就是30號(hào)鳥~撒歡~,最后放這個(gè)聊天室出來給大家作為學(xué)習(xí)nodejs的參考示例,希望對(duì)大家有用。

感謝:cnodejs群里的老雷,及其微博上的基友們!順祝大家長(zhǎng)假快樂,順祝自己明天動(dòng)車不出軌,順祝明年不再過節(jié),感慨多了……

特點(diǎn)

聊天室主要功能及其特點(diǎn):

  1. 采用nodejs(屁話)
  2. express框架,jade做模板
  3. socket.io做前后端的websocket通信
  4. 支持session
  5. 支持@私信功能

廢話不多說了,注意點(diǎn),基本前面的文章都提到了,下面羅列下:
《配置nodejs.exe的windows目錄結(jié)構(gòu)》
《安裝express及配置app.js文件》
《使用socket.io和node.js搭建websocket應(yīng)用》
《在Express和Socket.IO中使用session》

nodejs聊天室下載地址

基于express+socket.io的聊天室

聊天室服務(wù)器端js代碼

//========================變量定義===============================/** * modules引入 */var express = require('express'),	sio = require('socket.io'),	fs=require('fs'),	path = require('path')	url = require('url'),	parseCookie = require('connect').utils.parseCookie,	MemoryStore = require('connect/middleware/session/memory'); /** * 私人聊天使用session */var usersWS = {}, //私人聊天用的websocket	storeMemory = new MemoryStore({		reapInterval: 60000 * 10	});//session store//=========================app配置=============================	/** * app配置 */var app = module.export = express.createServer(); app.configure(function(){	app.use(express.bodyParser());	app.use(express.cookieParser());	app.use(express.session({		secret: 'wyq',		store:storeMemory 	}));	app.use(express.methodOverride());	app.use(app.router);//要放在bodyParser之后,處理post	app.set('views', __dirname + '/views');	app.set('view engine', 'jade');	app.use(express.static(__dirname + '/public'));});//=================配置socket.io=========================/** * 配置socket.io *  */	var io = sio.listen(app);//設(shè)置sessionio.set('authorization', function(handshakeData, callback){	// 通過客戶端的cookie字符串來獲取其session數(shù)據(jù)	handshakeData.cookie = parseCookie(handshakeData.headers.cookie)	var connect_sid = handshakeData.cookie['connect.sid']; 	if (connect_sid) {		storeMemory.get(connect_sid, function(error, session){			if (error) {				// if we cannot grab a session, turn down the connection				callback(error.message, false);			}			else {				// save the session data and accept the connection				handshakeData.session = session;				callback(null, true);			}		});	}	else {		callback('nosession');	}});//=========================URL=============================/** * url處理開始鳥~ * @param {Object} req * @param {Object} res */app.get('/',function(req,res){ 	if( req.session.name && req.session.name!==''){		//需要判斷下是否已經(jīng)登錄		res.redirect('/chat');	}else{		//讀取登錄頁(yè)面,要求登錄		var realpath = __dirname + '/views/' + url.parse('login.html').pathname;		var txt = fs.readFileSync(realpath);		res.end(txt);	}});app.get('/chat',function(req,res){	if (req.session.name && req.session.name !== '') {		//需要判斷下是否已經(jīng)登錄		res.render('chat',{name:req.session.name});	}else{		res.redirect('/');	}})app.post('/chat',function(req,res){	var name = req.body.nick;	if(name && name!==''){		req.session.name = name;//設(shè)置session		res.render('chat',{name:name});	}else{		res.end('nickname cannot null');	} }); //===================socket鏈接監(jiān)聽=================/** * 開始socket鏈接監(jiān)聽 * @param {Object} socket */io.sockets.on('connection', function (socket){	var session = socket.handshake.session;//session	var name = session.name;	usersWS[name] = socket;	var refresh_online = function(){		var n = [];		for (var i in usersWS){			n.push(i);		}		io.sockets.emit('online list', n);//所有人廣播	}	refresh_online(); 	socket.broadcast.emit('system message', '【'+name + '】回來了,大家趕緊去找TA聊聊~~'); 	//公共信息	socket.on('public message',function(msg, fn){		socket.broadcast.emit('public message', name, msg);		fn(true);	});	//私人@信息	socket.on('private message',function(to, msg, fn){		var target = usersWS[to];		if (target) {			fn(true);			target.emit('private message', name+'[私信]', msg);		}		else {			fn(false)			socket.emit('message error', to, msg);		}	}); 	//掉線,斷開鏈接處理	socket.on('disconnect', function(){		delete usersWS[name];		session = null;		socket.broadcast.emit('system message', '【'+name + '】無聲無息地離開了。。。');		refresh_online();	}); }); //===========app listen 開始鳥~==========app.listen(3000, function(){	var addr = app.address();	console.log('app listening on http://127.0.0.1:' + addr.port);});
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 俺去啦五月| 亚洲欧美经典 | 国产一级毛片外aaaa | 亚洲国产欧洲 | 最近的中文字幕大全免费8 最近的中文字幕大全免费版 | 国产三级在线观看专区 | 国产高清在线视频一区二区三区 | 国产精品爱久久久久久久9999 | 免费观看老外特级毛片 | 欧美精品国产综合久久 | 最新欧美精品一区二区三区 | 日本成人一区 | 免费网站在线播放 | 亚洲色图吧| 欧美最新的精品videoss | 免费观看的黄色网址 | 亚洲经典激情春色另类 | 特级做爰片毛片在线播放 | 亚洲国产网站 | 人人爱人人射 | 久久精品成人 | 国产精品一区二区久久精品涩爱 | 欧美αv天堂在线视频 | 成人国产精品一级毛片了 | 亚洲精品国产第一区二区三区 | 三级中文字幕永久在线视频 | www.欧美色| 婷婷丁香综合 | 校园春色第一页 | 亚洲国产成人久久精品图片 | 久爱精品视频在线视频 | 最新精品亚洲成a人在线观看 | 日韩乱码中文字幕视频 | 久久亚洲日本不卡一区二区 | 日本免费一区二区三区最新vr | 一级毛片在线完整观看 | 日韩欧美亚洲综合 | 午夜宅男在线视频 | 亚洲免费闲人蜜桃 | 最近中文字幕免费高清mv | 在线a视频网站 |