前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用node.js如何简单快速的搭建一个websocket聊天应用

使用node.js如何简单快速的搭建一个websocket聊天应用

作者头像
Vam的金豆之路
发布2021-12-01 09:06:06
5940
发布2021-12-01 09:06:06
举报
文章被收录于专栏:前端历劫之路
初始化项目
代码语言:javascript
复制
npm init
安装nodejs-websocket
代码语言:javascript
复制
npm install nodejs-websocket
创建并编辑启动文件

创建一个名为app.js文件,并且编辑它。

代码语言:javascript
复制
var ws = require("nodejs-websocket");
console.log("开始建立连接...")

var [user1,user2,user1Ready,user2Ready] = [null,null,false,false];

ws.createServer(function(conn){
    conn.on("text", function (str) {
        console.log("收到的信息为:"+str)
        if(str==="user1"){
            user1 = conn;
            user1Ready = true;
        }
        if(str==="user2"){
            user2 = conn;
            user2Ready = true;
        }
        if(user2Ready){
            user2.sendText(str);
        } 
        if(user1Ready){
          user1.sendText(str);
        }
    })
    conn.on("close", function (code, reason) {
        console.log("关闭连接")
    });
    conn.on("error", function (code, reason) {
        console.log("异常关闭")
    });
}).listen(8001)
console.log("WebSocket建立完毕")
分别创建并编辑两个用户页面文件

分别创建user1.htmluser2.html, 并且编辑它们。

「user1.html」

代码语言:javascript
复制
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>user1</title>
    <style>
        #mes{
            width: 300px;
            height: 300px;
            border: 1px solid #666;
            overflow: auto;
            margin-bottom:10px;
            padding: 5px;
        }
        li{
            text-decoration: none;
            background: #f4f4f4;
            padding: 5px;
            margin-top: 5px;
        }
        .tl{
            color: red;
            text-align: left;
        }
        .tr{
            color: green;
            text-align: right;
        }
    </style>
</head>
<body>
    <ul id="mes"></ul>
    <div class="kuang">
        <input type="text" value="" class="int">
        <button class="send">发送</button>
    </div>
    <script>
        var mes = document.getElementById("mes");
        if(window.WebSocket){
            var ws = new WebSocket('ws://localhost:8001');

            ws.onopen = function(e){
                console.log("连接服务器成功");
                ws.send("user1");
            }

            ws.onmessage = function(e){
                if(e.data!=="user1"&&e.data!=="user2"){
                    console.log(e);
                    var newData = JSON.parse(e.data);
                    var node=document.createElement("LI");
                    var textnode=document.createTextNode(newData.mes);
                    node.appendChild(textnode);
                    if(newData.name==="user2"){
                        node.classList.add("tl")
                        mes.appendChild(node);
                    } else{
                        node.classList.add("tr")
                        mes.appendChild(node);
                    }
                }
                document.querySelector(".send").onclick = function(e){
                    var obj = {
                        name:"user1",
                        mes:document.querySelector(".int").value
                    }
                    ws.send(JSON.stringify(obj));
                    document.querySelector(".int").value="";
                }
            }

            ws.onclose = function(e){
                console.log("服务器关闭");
            }

            ws.onerror = function(){
                console.log("连接出错");
            }
        }
    </script>
</body>
</html>

「user2.html」

代码语言:javascript
复制
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>user2</title>
    <style>
        #mes{
            width: 300px;
            height: 300px;
            border: 1px solid #666;
            overflow: auto;
            margin-bottom:10px;
            padding: 5px;
        }
        li{
            text-decoration: none;
            background: #f4f4f4;
            padding: 5px;
            margin-top: 5px;
        }
        .tl{
            color: red;
            text-align: left;
        }
        .tr{
            color: green;
            text-align: right;
        }
    </style>
</head>
<body>
    <ul id="mes"></ul>
    <div class="kuang">
      <input type="text" value="" class="int">
      <button class="send">发送</button>
  </div>
    <script>
        var mes = document.getElementById("mes");
        if(window.WebSocket){
            var ws = new WebSocket('ws://localhost:8001');
            ws.onopen = function(e){
                console.log("连接服务器成功");
                ws.send("user2");
            }

            ws.onmessage = function(e){
                if(e.data!=="user1"&&e.data!=="user2"){
                    console.log(e);
                    var newData = JSON.parse(e.data);
                    var node=document.createElement("LI");
                    var textnode=document.createTextNode(newData.mes);
                    node.appendChild(textnode);
                    if(newData.name==="user1"){
                        node.classList.add("tl")
                        mes.appendChild(node);
                    } else{
                        node.classList.add("tr")
                        mes.appendChild(node);
                    }
                }
                document.querySelector(".send").onclick = function(e){
                    var obj = {
                        name:"user2",
                        mes:document.querySelector(".int").value
                    }
                    ws.send(JSON.stringify(obj));
                    document.querySelector(".int").value="";
                }
            }

            ws.onclose = function(e){
                console.log("服务器关闭");
            }

            ws.onerror = function(){
                console.log("连接出错");
            }
        }
    </script>
</body>
</html>
启动项目
代码语言:javascript
复制
node app.js
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端历劫之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初始化项目
  • 安装nodejs-websocket
  • 创建并编辑启动文件
  • 分别创建并编辑两个用户页面文件
  • 启动项目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档