简版网页聊天室

简版网页聊天室

开发工具为vscode 文档目录结构如下

index页面

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./scripts/jquery-3.5.1.js"></script>
    <script src="./scripts/bootstrap.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script src="./scripts/script.js"></script>
    <link rel="stylesheet" href="./css/bootstrap.css">
    <style>
        html,
        body {
            margin: 0px;
            padding: 0px;
            height: 100%;
            background-color: gainsboro;
            overflow: hidden;
        }

        #loginbox {
            width: 100%;
            height: 200px;
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            margin: auto;
        }

        h1 {
            text-align: center;
        }

        .login {
            width: 500px;
            margin: 0 auto;
        }

        #chatbox {
            height: 100%;
        }

        #top {
            /* position: fixed;
            top: 0;
            left: 0; */
            height: 60px;
            width: 100%;
            /* background-color: hotpink; */
        }

        #content {
            width: 100%;
            height: 100%;
            box-sizing: border-box;
            /* padding: 60px 0 40px; */
            padding-bottom: 40px;
            overflow-y: auto;
            /* background-color: aqua; */
        }

        #footer {
            position: fixed;
            bottom: 0;
            left: 0;
            height: 40px;
            width: 100%;
            box-sizing: border-box;
            background-color: gainsboro;
            /* background-color: yellow; */
            padding: 2px 0;
        }

        .alert {
            z-index: 100;
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
        }

        #chatinput {
            margin-left: 10px;
            font-size: 25px;
        }
    </style>
</head>

<body>
    <div id="loginbox">
        <h1>登录</h1>
        <hr>
        <div class="login">
            <div class="form-horizontal">
                <div class="form-group">
                    <label for="name" class="col-sm-3 control-label">用户名</label>
                    <div class="col-sm-6">
                        <input type="text" class="form-control" id="name" placeholder="请输入用户名">
                    </div>
                    <label for="name" class="col-sm-3 control-label" id="errmsg"></label>
                </div>
                <div class="form-group">
                    <div class="col-sm-offset-3 col-sm-9">
                        <button type="button" class="btn btn-info btn-default" id="loginbutton">登录</button>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div style="display: none;" id="chatbox">
        <!-- 显示欢迎信息 -->
        <div class="alert alert-info alert-dismissible fade in" role="alert" id="myalert">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
                    aria-hidden="true">&times;</span></button>
        </div>
        <!-- 显示好友上线提醒 -->
        <div class="alert alert-info alert-dismissible fade in" role="alert" id="myalert1">
            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
                    aria-hidden="true">&times;</span></button>
            <span></span>
        </div>

        <div id="top"></div>
        <div id="content"></div>
        <div id="footer">
            <div class="row">
                <div class="col-md-11">
                    <input type="text" placeholder="saying somgthing" class="form-control" id="chatinput">
                </div>
                <form action="" style="display: none;" id="resetform">
                    <input type="file" style="display: none" id="imginput">
                </form>
                <div class="col-md-1">
                    <button type="button" class="btn btn-primary" id="imgbutton">发送图片</button>
                </div>
            </div>
        </div>
    </div>

</body>

</html>

app.js

var express = require("express")
var app = express();
var server = require("http").Server(app);
var path = require("path")
var io = require("socket.io")(server)

//保存在线用户的数量
var usersNum = 0
//保存当前所有在线用户
var users = []

server.listen(3000, function () {
    console.log("server running at localhost:3000")
})

io.on("connection", function (socket) {
    usersNum++
    console.log(`当前有${usersNum}个用户连接上服务器了`)

    socket.on("login", function (data) {
        // console.log(data)

        //用户名重复检查
        socket.username = data.username
        for (var user of users) {
            if (user.username == data.username) {
                socket.emit("usernameErr", { err: "用户名已存在" })
                socket.username = null
                break;
            }
        }

        if (socket.username) {
            users.push({
                username: data.username,
                messages: [],
                dataUrl:[]
            })

            //触发loginSuccess事件
            io.emit("loginSuccess", data)
        }
    })

    //监听sendMessage事件,获取客户端发送文本消息
    socket.on("sendMessage", function (data) {
        //console.log(data)
        for (var i = 0; i < users.length; i++) {
            if (users[i].username == data.username) {
                users[i].messages.push(data.msg)
                //存储文本消息后,将文本消息广播给其他终端
                io.emit("receiveMessage", data)
                break;
            }
        }
    })
    //监听客户端发出的sendImg事件,获取图片数据
    socket.on("sendImg", function (data) {
        //console.log("sendImg",data)
        for (var i = 0; i < users.length; i++) {
            if (users[i].username == data.username) {
                users[i].dataUrl.push(data.dataUrl)
                
                //存储图片后,将图片信息广播给其他终端
                io.emit("receiveImg", data)
                break;
            }
        }
    })

    socket.on("disconnect", function () {
        usersNum--;
        console.log(`当前有${usersNum}个用户连接上服务器了`)

        //删除用户
        users.forEach(function (user, index) {
            if (user.username == socket.username) {
                users.splice(index, 1)
            }
        })

    })
})





app.use("/", express.static(path.join(__dirname, "./public")))

script .js

var express = require("express")
var app = express();
var server = require("http").Server(app);
var path = require("path")
var io = require("socket.io")(server)

//保存在线用户的数量
var usersNum = 0
//保存当前所有在线用户
var users = []

server.listen(3000, function () {
    console.log("server running at localhost:3000")
})

io.on("connection", function (socket) {
    usersNum++
    console.log(`当前有${usersNum}个用户连接上服务器了`)

    socket.on("login", function (data) {
        // console.log(data)

        //用户名重复检查
        socket.username = data.username
        for (var user of users) {
            if (user.username == data.username) {
                socket.emit("usernameErr", { err: "用户名已存在" })
                socket.username = null
                break;
            }
        }

        if (socket.username) {
            users.push({
                username: data.username,
                messages: [],
                dataUrl:[]
            })

            //触发loginSuccess事件
            io.emit("loginSuccess", data)
        }
    })

    //监听sendMessage事件,获取客户端发送文本消息
    socket.on("sendMessage", function (data) {
        //console.log(data)
        for (var i = 0; i < users.length; i++) {
            if (users[i].username == data.username) {
                users[i].messages.push(data.msg)
                //存储文本消息后,将文本消息广播给其他终端
                io.emit("receiveMessage", data)
                break;
            }
        }
    })
    //监听客户端发出的sendImg事件,获取图片数据
    socket.on("sendImg", function (data) {
        //console.log("sendImg",data)
        for (var i = 0; i < users.length; i++) {
            if (users[i].username == data.username) {
                users[i].dataUrl.push(data.dataUrl)
                
                //存储图片后,将图片信息广播给其他终端
                io.emit("receiveImg", data)
                break;
            }
        }
    })

    socket.on("disconnect", function () {
        usersNum--;
        console.log(`当前有${usersNum}个用户连接上服务器了`)

        //删除用户
        users.forEach(function (user, index) {
            if (user.username == socket.username) {
                users.splice(index, 1)
            }
        })

    })
})





app.use("/", express.static(path.join(__dirname, "./public")))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值