node.js 小聊天室
简介:
研究了两天node.js,写了一个小小聊天室,目前只实现了简单的群聊和私聊,写的不好的地方请大家指正:)
环境:
主机xp和虚拟机linux进行的通讯
xp:运行apache,运行客户端的php程序
linux:node.js
1、服务器端 (app.js)
var io = require('socket.io').listen(888);
//用于记录所有的客户端
var user_coll = {};
io.sockets.on('connection', function (socket) {
//客户端连接成功则设置客户端标示
socket.on('set nickname', function (name) {
user_coll[name] = socket;
user_coll[name].set('username', name, function () { user_coll[name].emit('ready'); });
user_coll[name].on('publicmsg',function(data){
user_coll[name].get('username',function(err, name){
var msg ="public msg - "+ name + " say : "+data;
io.sockets.emit('usermsg',msg);
});
})
user_coll[name].on('privatemsg',function(data){
//console.log(JSON);return false;
var jsonData = eval(data);
user_coll[jsonData.sendTo].get('username',function(err,name){
var msg ="private msg - "+name +" say : "+jsonData.text;
user_coll[jsonData.sendTo].emit('usermsg',msg);
});
});
});
});
2、客户端(client.php)
<?
$name = $_GET['name'];
?>
<HTML>
<HEAD>
<TITLE> room </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script src="http://10.190.19.38:888/socket.io/socket.io.js"></script>
</HEAD>
<BODY>
<script>
var socket = io.connect('http://10.190.19.38:888');
socket.on('connect', function () {
socket.emit('set nickname', '<?=$name?>');
socket.on('ready', function () {
document.getElementById('chatbox').innerHTML += "welcome into chatroom!<br>";
});
socket.on('usermsg', function (data) {
document.getElementById('chatbox').innerHTML += data+"<br>";
});
});
function sendToSer(){
var sendTo = document.getElementById('send-to').value;
var text = document.getElementById('send-content').value;
if(sendTo == ''){
socket.emit('publicmsg',text);
}else{
socket.emit('privatemsg',{'sendTo':sendTo,'text':text});
}
}
</script>
<h1>Chat Room</h1>
发送给:<input type='text' id= 'send-to'> 内容: <input type='text' id= 'send-content'>
<input type='button' value='send' onclick='sendToSer()'>
<div id="chatbox" style='border:1px solid red;width :500px;height:800px' ></div>
</BODY>
</HTML>