zoukankan      html  css  js  c++  java
  • socket.io 实现简易聊天

    客户端:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }
            textarea{
                resize: none;
            }
            .main1{
                float: left;
            }
            #main{
                float: left;
                width: 400px;
                height: 400px;
                overflow-y: auto;
                border: solid 1px blue;
            }
            .dialog{
                width: 300px;
                height: 50px;
                margin: 20px 30px;
            }
            .course-btn {
                width: 150px;
                background-color: #00b33b;
                font: 14px/40px "Helvetica Neue","Hiragino Sans GB","Segoe UI","Microsoft Yahei","微软雅黑",Tahoma,Arial,STHeiti,sans-serif;
                height: 40px;
                padding: 0 12px;
                text-align: center;
                color: #fff;
                cursor: pointer;
                margin-top: 20px;
                border-radius: 2px;
            }
            .textRun{
                display: none;
                margin-left: 30px;
                width: 300px;
            }
        </style>
    </head>
    <body>
        <div class="main1">
            <div class="dialog">
                <input type="text" id="username" placeholder="请输入用户名">
                <button onclick=dialog()>登录</button>
            </div>
            <div class="textRun">
                <textarea name="" id="tv" cols="30" rows="10"></textarea>
                <div onclick="textrun()" class="course-btn">发表评论</div>
            </div>
        </div>
        
        <div id="main">
            
        </div>
        <script src="js/socket.io.slim.js"></script>
        <script>
            var username;
            function dialog () {
                username = document.getElementById('username').value;
                var DA = document.getElementsByClassName('dialog')[0];
                if(username!='') {
                    socket.emit('dialog',username)
                    DA.style.display = 'none';
                    document.getElementsByClassName('textRun')[0].style.display = 'block';
                }
            }
            function textrun () {
                var text = document.getElementById('tv').value;
                socket.emit('text',{name:username,text:text})
                document.getElementById('tv').value = '';
            }
            var socket = io('http://localhost:3001')
        
            socket.on("text",function(data){
                console.log(data)
                var div = document.createElement('div');
                var t = div.innerHTML = '<p>'+data.name+':'+data.text+'</p>';
                var main = document.getElementById('main');
                main.appendChild(div)
                main.scrollTop = main.scrollHeight;
            })
        
        </script>
    </body>
    </html>

    服务端:

    var app = require('http').createServer();
    var io = require('socket.io')(app);
    var count = 0
    var mapUsername = [];
    
    function addEventLinsten(socket, event) {
        socket.on(event, function(data){
            for (var i in mapUsername) {
                if(i){
                    mapUsername[i].emit(event, data)
                }
            }
        })
        
    }
    // 连接
    io.on('connection', function(socket){
        count += 1
        socket.num = count;
        mapUsername[count] = socket
        addEventLinsten(socket, 'dialog')
        addEventLinsten(socket, 'text')
    
        // 断开
        socket.on('disconnect', function(){
            delete(mapUsername[socket.num])
        })
    })
    app.listen(3001);
    console.log('socket 运行成功')
  • 相关阅读:
    CF1290E Cartesian Tree
    【LeetCode】11. 盛最多水的容器
    【LeetCode】10. 正则表达式匹配
    【LeetCode】9. 回文数
    【LeetCode】8. 字符串转换整数 (atoi)
    【LeetCode】7. 整数反转
    【LeetCode】6. Z 字形变换
    【LeetCode】5. 最长回文子串
    【LeetCode】4. 寻找两个正序数组的中位数[待补充]
    【LeetCode】3. 无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/steamedCray/p/8493589.html
Copyright © 2011-2022 走看看