前端:JSP+tomcat
聊天服务器:Nodejs自带服务器
通信组件:Socket.io
这个聊天室,实现群组聊天和私聊。
效果图:
nodejs代码
/**
* Created by lkt on 15-4-17.
*/
var room = require("../modules/entity/Room.js")
function chatSocket(){
return this;
}
module.exports = chatSocket;
chatSocket.Start = function Start(io){
var rooms = new Array();
var userList = new Array();
var userSocketMap = {};
io.sockets.on('connection',function(socket){
//socket.emit('conn',{'value':'hello,welcome!','user':'System'});
//接收用户修改姓名
socket.on('setName',function(data){
var index = userList.indexOf(data.name);
if(index==-1){
userList.push(data.name);
userSocketMap[data.name] = socket;
socket.emit('setName',{'value':'欢迎您! '+data.name,'user':'System','type':'new'});
}else{
socket.emit('setName',{'value':'昵称 '+data.name+' 已经存在!','user':'System','type':'rep'});
}
});
//私聊
socket.on('pchat',function(data){
var v = data.value;
var tname = v.substring(v.indexOf('@')+1,v.indexOf(']'));
console.log(tname);
var s = userSocketMap[tname];
s.emit('pchat',{value:data.value,fname:data.fname});
});
//给用户发送房间信息
socket.emit('rooms',{rooms:rooms});
//接收用户创建房间的指令
socket.on('cRoom',function(data){
var repCreate=false;
//判断房间是否存在
rooms.forEach(function(r){
if(r.name==data.name){
repCreate = true;
}
});
if(!repCreate){
leaveMyInRoom(data,socket,rooms);
var r = new room(data.name,data.ho);
rooms.push(r);
socket.join(data.name);
socket.emit('rooms',{rooms:rooms,room:data.name,value:'房间 ['+data.name+'] 创建成功!','user':'System'});
//给除了自己以外的客户端广播消息
socket.broadcast.emit('refRooms',{rooms:rooms});
}else{
socket.emit('rooms',{rooms:rooms,room:data.name,value:'房间 ['+data.name+'] 已经存在!','user':'System'});
}
//
});
socket.on('say',function(data){