webSocket聊天室

简单的webSocket实践dome

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>聊天室</title>
</head>

<body>
    <h1>WebSocket 聊天</h1>
    <div id="app">
        <input type="text" id="sendMsg" />
        <button id="submitBtn">send</button>
    </div>
</body>

</html>

<script>

    // 在页面显示聊天内容
    function showMessage(str, type) {
        var div = document.createElement("div");
        div.innerHTML = str
        if (type === 'enter') {
            div.style.color = 'blue';

        } else if (type === 'leave') {
            div.style.color = 'red'
        }
        document.body.appendChild(div)
    }

    // 新建一个websocket
    var websocket = new WebSocket("ws://192.168.1.101:8010");

    // 打开websocket连接
    websocket.onopen = function () {
        console.log("已经连上服务器");
        document.getElementById('submitBtn').onclick = function () {
            var txt = document.getElementById('sendMsg').value;
            if (txt) {
                websocket.send(txt)
            }
        }
    }
    // 关闭连接
    websocket.onclose = function () {
        console.log("websocket close");
    }

    // 接受服务器返回的数据
    websocket.onmessage = function (e) {
        var mes = JSON.parse(e.data)
        showMessage(mes.data, mes.type)
    }
</script>
var ws = require('nodejs-websocket');
var port = 8010;
var user = 0;
console.log(ws, 'wa');
// 创建一个连接
var server = ws.createServer(function (conn) {
    console.log("创建一个新的连接");
    user++;
    conn.nickname = "user" + user;
    conn.fd = "user" + user;
    var mes = {};
    mes.type = "enter";
    mes.data = conn.nickname + '进来了';
    broadcast(JSON.stringify(mes)) // 广播

    // 向客户端推送消息
    conn.on("text", function (str) {
        console.log("回复" + str);
        mes.type = "message";
        mes.data = `${conn.nickname}说:${str}`;
        broadcast(JSON.stringify(mes));
    })

    // 监听关闭连接操作
    conn.on('close', function (code, reason) {
        console.log("关闭连接");
        mes.type = "leave";
        mes.data = `${conn.nickname}离开了`;
        broadcast(JSON.stringify(mes));
    })

    // 错误处理
    conn.on("error", function (err) {
        console.log("监听到错误", err);
    })
}).listen(port, () => {
    console.log("已连接");
})

function broadcast(str) {
    server.connections.forEach(function (connection) {
        connection.sendText(str)
    })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值