JSP+Nodejs+Socket.IO 聊天室

前端: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){
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值