Node.js(socket.io)+ html + js搭建简单聊天工具

Node.js+ html + js搭建简单聊天工具

干货,直接撸代码

环境准备

Node.js

依赖模块

socket.io

npm install socket.io

服务端

app.js

var fs = require('fs')	//文件操作
    , http = require('http')	//http服务器
    , socketio = require('socket.io');	//socket.io,用来和前台进行交互
  
var server = http.createServer(function(req, res) {
    res.writeHead(200, { 'Content-type': 'text/html'});
    //将index.html输出
    res.end(fs.readFileSync(__dirname + '/index.html'));
}).listen(4343, function() {
    console.log('Listening at: http://localhost:4343');
});

//连接成功的回调  
socketio.listen(server).on('connection', function (socket) {
    socket.on('message', function (msg) {
        console.log('接受到 ', msg);
        //将信息发送给其他客户端,广播出去
        socket.broadcast.emit('message', msg);
    });
});

客户端

index.html

<html>
<head>
	<meta charset="utf-8">
    <link href="https://michaelma666.github.io/Resume/Michael_Resume_zh/images/logo.png" rel="icon">
    <style type="text/css">
        .chatBody {
            background-color: #E8EEF3;
            padding: 10px;
            height: 350px;
            overflow-y: auto;
        }
        ::-webkit-scrollbar  
        {  
            width: 6px;  
            height: 6px;  
            background-color: #F5F5F5;  
        }  
          
        /*定义滚动条轨道 内阴影+圆角*/  
        ::-webkit-scrollbar-track  
        {   
            border-radius: 10px;  
            background-color: #F5F5F5;  
        }  
          
        /*定义滑块 内阴影+圆角*/  
        ::-webkit-scrollbar-thumb  
        {  
            border-radius: 10px;    
            background-color: #123655;  
        } 
        .msg {
            background-color: #DE6860;
            border-radius: 10px;
            padding: 5px 10px;
            color: #FFF;
            word-break: break-all;
        }
        .msgContainer {
            margin: 20px;
        }
        .left {
            text-align:left;
        }
        .right {
            text-align:right;
        }
        .chatBox {
            width:500px;
            height: 400px;
            margin: 0 auto;
        }
        .chatHeader {
            background-color: #5B6FD2;
            padding: 10px 30px;
            border-radius: 10px 10px 0 0;
            color: #EEE;
        }
        .chatFooter {
            background-color: #5B6FD2;
            padding: 10px 30px;
            border-radius: 0 0 10px 10px;
        }
        input {
            height: 30px;
            line-height: 30px;
            padding: 5px 10px;
            border-radius: 5px;
        }
        #sendMsg {
            background-color: #4D93FD;
            cursor: pointer;
            color: #FFF;
            padding: 5px;
            display: inline-block;
            padding: 6px 26px;
            margin-bottom: 0;
            font-size: 14px;
            line-height: 20px;
            text-align: center;
            vertical-align: middle;
            border:0;
        }
        #sendMsg:hover,#sendMsg:active,#sendMsg:focus{
            background-color: #7B8EE8;
        }
        #chatMessage {
            width: 327px;
        }
        #clear {
            cursor: pointer;
            float: right;
        }
    </style>
   
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
    <script src="/socket.io/socket.io.js"></script>
         
    <script>
        $(function(){
            var iosocket = io.connect();
  
            iosocket.on('connect', function () {
                alert('连接成功');
  
                iosocket.on('message', function(message) {
                    showotherMsg(message);
                });
                iosocket.on('disconnect', function() {
                    alert('连接已断开!');
                });
            });
  
            $('#chatMessage').keypress(function(event) {
                if(event.which == 13) {
                    event.preventDefault();
                    if($('#chatMessage').val() == ''){
                        return false;
                    }
                    else {
                        showSelfMsg($('#chatMessage').val());
                        iosocket.send($('#chatMessage').val());
                        $('#chatMessage').val('');
                    }
                }
            });

            $('#sendMsg').click(function(event) {
                if($('#chatMessage').val() == ''){
                    return false;
                }
                else {
                    showSelfMsg($('#chatMessage').val());
                    iosocket.send($('#chatMessage').val());
                    $('#chatMessage').val('');
                }
            });

            $('#clear').click(function(event){
                $('.chatBody').empty('');
            });
        });
    </script>
</head>
<body>
    <div class="chatBox">
        <div class="chatHeader">
            <span id="name">陆小凤</span>
            <span id='ip'></span>
            <span id='clear'>清屏</span>
        </div>
        <div class="chatBody">
            <div class="msgContainer left">
                <span class="msg">久仰久仰</span>
            </div>
            <div class="msgContainer right">
                <span class="msg">幸会幸会</span>
            </div>
        </div>
        <div class="chatFooter">
            <input type="text" id="chatMessage"> 
            <input type="button" name="" value="飞鸽传书" id="sendMsg">   
        </div>
    </div>
</body>
<script type="text/javascript">
    function showSelfMsg(context) {
        $('.chatBody').append('<div class="msgContainer right">'
                +'<span class="msg">'+ context +'</span>'
            +'</div>');
        autoScroll();
    }
    function showotherMsg(context) {
        $('.chatBody').append('<div class="msgContainer left">'
                +'<span class="msg">'+ context +'</span>'
            +'</div>');
        autoScroll();
    }
    function autoScroll(){
        $('.chatBody').scrollTop($('.chatBody')[0].scrollHeight);
    }

</script>
</html>

运行

node app.js

打开两个浏览器,都输入http://localhost:4333,附上个演示视频和截图。自己和自己玩吧。独自加班的夜晚就指它玩了:)
在这里插入图片描述

录屏演示
源码地址
原blog地址

猜你喜欢

转载自blog.csdn.net/weixin_44083075/article/details/84988682