聊天室极简版(node.js)

转载自:点击打开链接

跟着大神的脚步,实现了部分功能。

最终目录:


index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
    <h1>主页</h1>
    <p>welcome <span id="uname"></span></p>
    <p id="p_title1"></p>
    <p id="user_count"></p>
    <div id="msgs">

    </div>
    <input type="text" id="send_msg">
    <button id="sendBtn">发送</button>

    <div id="loginWrapper">
        <p id="p_server">连接服务器中...</p>
        <p id="p_info"></p>
        <div id="login">
            <input type="text" id="input_nick">
            <button id="btn_login">登录</button>
        </div>
        <p id="login_tip"></p>
    </div>

    <script src="js/common.js"></script>
    <script src="js/socket.io.js"></script>
    <script src="js/chat.js"></script>
    <script>
        var socket=io.connect(),//与服务器进行连接
            button=document.getElementById('sendBtn');
        btn_login.οnclick=function(){
            socket.emit('foo', 'hello');//发送一个名为foo的事件,并且传递一个字符串数据‘hello’
        }
    </script>

</body>
</html>
index.css:

#loginWrapper{
    position: absolute;
    top:0;
    left:0;
    width:100%;
    height:100%;
    background: rgba(5, 5, 5, .6);
    z-index:10;
    color: #FFF;
}
#login{
    display: none;
}
#msgs{
    width:50%;
    height:400px;
    border:1px solid #000;
}
common.js:

function getId(id){
    return document.getElementById(id);
}
chat.js:

/**
 * Created by web-01 on 2018/1/3.
 */
window.οnlοad=function(){
    var chat=new Chat();
    chat.init();
};
var Chat=function(){
    this.socket=null;
}
Chat.prototype={
    init:function(){
        var that=this;
        //建立到服务器的socket连接
        this.socket=io.connect();
        //监听socket的connect事件,此事件表示连接已经建立
        this.socket.on('connect',function(){
            getId('p_server').style.display="none";
            getId('p_info').innerHTML="请输入用户名:";
            getId('login').style.display="block";
            getId('input_nick').focus();
        });
        btn_login.addEventListener('click',function(){
            var nickName=getId('input_nick').value;
            if(nickName.trim().length!=0){
                that.socket.emit('login',nickName);
            }else{
                getId('input_nick').focus();
            }
        },false);
        this.socket.on('nickExisted',function(){
            getId('login_tip').innerHTML="昵称已经被占用";
        });
        this.socket.on('loginSuccess',function(){
            getId("uname").innerHTML=getId("input_nick").value;
            getId("loginWrapper").style.display="none";
            getId("send_msg").focus();
        });
        this.socket.on('system',function(nickName,userCount,type){
            var msg=nickName+(type=='login'?'joined':'leave');
            that._displayNewMsg('system',msg);
            getId("p_title1").innerHTML=msg;
            getId("user_count").innerHTML=userCount+(userCount>1?'users':'user')+' online';
        });
        sendBtn.addEventListener('click',function(){
            var messageInput=getId("send_msg"),
                msg=messageInput.value;
            messageInput.value='';
            messageInput.focus();
            if(msg.trim().length!=0){
                that.socket.emit('postMsg',msg);
                that._displayNewMsg('me',msg);
            }
        },false);
        this.socket.on('newMsg',function(user,msg){
            that._displayNewMsg(user,msg);
        })
    },
    _displayNewMsg:function(user,msg){
        var container=getId("msgs"),
            msgToDisplay=document.createElement('p'),
            date=new Date().toTimeString().substr(0,8);
        msgToDisplay.innerHTML=user+'<span>('+date+'):</span>'+msg;
        container.appendChild(msgToDisplay);
        container.scrollTop=container.scrollHeight;
    }
};


server.js:

/**
 * Created by web-01 on 2018/1/3.
 */
var http=require('http');
var server=http.createServer(function(req,res){
    res.writeHead(200,{
        'Content-Type':'text/plain'
    });
    res.write('hello world!');
    res.end();
});

var express=require('express'),
    app=express(),
    server=require('http').createServer(app);
app.use('/',express.static(__dirname+'/www'));
server.listen(80);

var io=require("socket.io").listen(server);
var users=[];
io.on('connection',function(socket){
    socket.on('foo',function(data){
        console.log(data);
    });
    socket.on('login',function(nickname){
        if(users.indexOf(nickname)>-1){
            socket.emit('nickExisted');
        }else{
            socket.userIndex=users.length;
            socket.nickname=nickname;
            users.push(nickname);
            socket.emit("loginSuccess");
            io.sockets.emit("system",nickname,users.length,'login');
            console.log("loginSuccess");
        }
    });
    socket.on('disconnect',function(){
        //将断开连接的用户从users中删除
        users.splice(socket.userIndex,1);
        //通知除自己以外的所有人
        socket.broadcast.emit('system',socket.nickname,users.length,'logout');
    });
    socket.on('postMsg',function(msg){
        //将消息发送到除自己外的所有用户
        socket.broadcast.emit('newMsg',socket.nickname,msg);
    });
});

console.log('server started');

效果图:

注意:

可以去参考博客看完整实现(可以发图片和表情等)。




1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值