Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用node.js如何简单快速的搭建一个websocket聊天应用

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
<!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
代码运行次数:0
运行
AI代码解释
复制
<!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
代码运行次数:0
运行
AI代码解释
复制
node app.js
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用node.js如何简单快速的搭建一个websocket聊天应用
var ws = require(“nodejs-websocket”); console.log(“开始建立连接…”)
马克社区
2022/06/13
4630
使用原生js + websocket 做一个聊天室
websocket是 html5 新增的一项api,实现客户端与服务器之间的即时通信。今天用它来实现一个聊天室demo,这里选择原生js来实现,因为用惯了vue和react的舒适框架,是时候复习一下原生的api了。毕竟现在前端技术更新很快,掌握好底层的东西才能做到以不变应万变
心念
2023/01/11
2.3K0
WebSocket简单应用
点击这里前往Github获取本文源码,注意server.js是在Node环境里跑的。
kifuan
2022/10/24
3710
Nodejs + WebSocket简单介绍及示例 – 第一章
如果说ajax像手机发短信一样,发送信息,获取信息,那么websocket技术则是打电话这样。WebSocket要达到的目的是让用户不需要刷新浏览器就可以获得实时更新。
Javanx
2019/09/04
2.5K0
Nodejs + WebSocket简单介绍及示例 – 第一章
Nodejs + WebSocket + Vue 实现多人聊天室WebIM功能 – 第二章
在《Nodejs + WebSocket简单介绍及示例 - 第一章》中简单的介绍了,Nodejs + WebSocket的使用方法及作用,今天就用它来搭建一个简单的聊天室功能。
Javanx
2019/09/04
2.4K0
Nodejs + WebSocket + Vue 实现多人聊天室WebIM功能 – 第二章
【NPM库】- 0x06 - WebSocket
WebSocket 是一种通信协议,可在单个 TCP 连接上进行全双工通信。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。
WEBJ2EE
2020/09/01
9510
【NPM库】- 0x06 - WebSocket
新手入门:websocket
对于第1次听说WebSocket技术的人来说,两者有什么区别?websocket是仅仅将socket的概念移植到浏览器中的实现吗?
全栈程序员站长
2022/09/14
9100
新手入门:websocket
springboot websocket 跨域_前端websocket框架
WebSocket 是 HTML5 开始提供的⼀种在单个 TCP 连接上进⾏全双⼯通讯的协议,可以实现跨域访问。 websocket安装命令 npm i ws -S 服务器端:
全栈程序员站长
2022/11/14
1.7K0
nodejs搭建websocket服务器
前面我们了解了什么是websocket,下面用nodejs简单的搭建一个websocket服务器,我们使用nodejs-websocket这个npm包,看代码:
挥刀北上
2021/02/03
4.3K0
Nodejs + WebSocket + Vue 一对一、一对多聊天室 – 第三章
如果你看到这篇文章,还没有了解前面2篇文章的同学,可以先去了解一波,这样上手更快。 推荐文章:
Javanx
2019/09/04
2.2K0
Nodejs + WebSocket + Vue 一对一、一对多聊天室 – 第三章
基于Node.js的Web Socket
以前看到过很多关于node.js的文章,但一直没有尝试去搭建node.js的环境。这里有一篇文章叫“websocket与node.js的完美结合”
meteoric
2018/11/15
1.3K0
沉寂了一周,我开发了一个聊天室
最近一周没有发文章了,我在这里向大家说一声抱歉。今天,我们来从零开始开发一款聊天室。好,我们现在就开始。
Vam的金豆之路
2021/12/01
5600
沉寂了一周,我开发了一个聊天室
python实现单工、半双工、全双工聊天室
半双工实现是连接建立以后,服务器等待客户端发送消息,客户端发送消息后等待接收服务器,这样一来一回循环往复下去。直到出现quit,关闭连接。
Ewdager
2020/07/14
1.7K0
HTML5 - 开发一个自己的websocket服务器
https://github.com/sitegui/nodejs-websocket#how-to-use-it
xing.org1^
2019/06/13
1.5K0
JavaScript与Node.js一起打造一款聊天App
聊天是我们人与人交流最直接的方式,互联网的加入使我们交流更加便捷。我们手机上的微信、QQ是我们手机必不可少的应用软件。那么,我们是否可以做一款聊天应用呢?
Vam的金豆之路
2021/12/01
5310
JavaScript与Node.js一起打造一款聊天App
WebSocket 学习
WebSocket是一种在单个TCP连接上进行全双工通信的协议,它为客户机和服务器之间的双向数据流提供了新的选择。相比HTTP协议,WebSocket具有更低的延迟和更高的效率,可以实现实时数据传输,如即时通讯、在线游戏等。
心安事随
2024/07/29
1410
websocket+netty实时视频弹幕交互功能(Java版)
来源 | https://binhao.blog.csdn.net/article/details/112631642
程序猿DD
2021/10/14
8850
使用Node.js的简单Websocket示例
本文翻译自Simple Websocket Example with Nodejs
ccf19881030
2020/07/16
6.5K0
[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket)
https://www.callicoder.com/spring-boot-websocket-chat-example/
Rude3Knife的公众号
2019/08/16
2.8K0
[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket)
php+websocket 实现在线聊天室功能详解,含前后端代码
本文实例讲述了php+websocket 实现的聊天室功能。分享给大家供大家参考,具体如下:
程序猿的栖息地
2022/04/29
3.8K1
php+websocket 实现在线聊天室功能详解,含前后端代码
相关推荐
使用node.js如何简单快速的搭建一个websocket聊天应用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验