基于NodeJS+Socket的聊天室

浏览量:500 | 分类:Node.js | 发布日期:2012-02-12

基于NodeJS+Socket的聊天室 NodeJS服务端代码

var http	= require('http'),
	io		= require('socket.io'),
	fs		= require('fs');

//配置
var config = {
	port : 8888
}

http = http.createServer(handler);
http.listen(config.port);
io = io.listen(http);

function handler(req, res) {
	fs.readFile(__dirname+'/client.html',
	function(err, data){
		req.setEncoding(encoding="utf8");
		res.writeHead(200);
		res.end(data);
	});
}
//'connection' 是socket.io 保留的,不能错哦
io.sockets.on('connection',function(socket){ 
	 //'msg'是我们自定义的,客户端听取的时候要指定同样的事件名
	socket.emit('msg',{hi:'Happy new year.'});
	 //'msg'需要和客户端发送时定义的事件名相同
	socket.on('msg',function(data){
		console.log('Get a msg from client ...');
		console.log(data);
		socket.broadcast.emit('user message',data);
	});
});

客户端代码

<!DOCTYPE html>
<html>
 <head>
  <title> 聊天室 </title>
  <script src="/socket.io/socket.io.js"></script>
  <script type="text/javascript">

	var socket = io.connect('http://localhost:8888');

	socket.on('user message',function(msg){
		msgbox(msg.msg);
	});
	
	function sendMsg(){
		var inpt = document.getElementById('txtInput');
		var str = inpt.value;
		msgbox(str);
		//发送
		socket.emit('msg',{msg:str});
		console.log('[client]' + str);
		inpt.value = "";
		inpt.focus();
	}
	function msgbox(str){
		var box = document.getElementById('box');
		box.innerHTML += '<b>访客说</b>:'+str + '<br<-----<br>';		
	}
  </script>
 <style type="text/css">
 	#box {
		overflow: auto;
		width:500px;height:300px;border:1px solid #dcdcdc;
	}
	#txtInput {
		width:430px;	
	}
 </style>
 </head>

 <body>
	<h2>聊天室</h2>
	<div id='box' ></div>
	<input type='text' id='txtInput' ><input type='button' value='发送' onclick='sendMsg();'>
 </body>
</html>

下载地址

上一篇: MongoDB无法启动终极解决办法

下一篇: jQuery事件绑定子元素继承问题

评论