使用nodeJS中的WebSocket实现简单的聊天功能

思路整理

webSocket是服务器向客户端发送信息的一种手段
这里是 更多关于 webSocket 的内容
如果想要了解更多关于 nodeJS 中的webSocket内容,点击这里

开始之前,我们需要新建两个客户端和一个服务端,
服务端负责保存与客户端的连接并且在双方都在线上之后传输双方的讯息
客户端需要建立与服务器的连接然后通过指定方式声明自己的身份,然后开始 聊天

服务端

编写前要有 nodejs-websocket 包,可通过 npm i --save nodejs-websocket 安装
大体步骤:
新建服务器 ⇒
监听连接中的事件 ⇒
如果双方都建立过连接就向另一方发送讯息 ⇒
否则验证连接的口令是否正确,正确则将连接保存起来并视为以上线

let ws = require("nodejs-websocket");let chatA = null,chatB = null;
console.log(ws);
ws.createServer((conn) => {// 收到文本请求conn.on("text", (msg) => {// 如果双方都建立了连接,可以通信if (chatA && chatB) {if (conn === chatA) {// 向另一个连接发讯息chatB.send(msg)} else {chatA.send(msg)}return}// 有人不在线上,判断登录口令if (msg === "chatA token") {// 保存连接以判断是否上线与发送讯息chatA = conn;return}if (msg === "chatB token") {chatB = conn;}})conn.on("close", () => {})conn.on("error", (code, reason) => {console.log("exit with error code " + code + ", reason:" + reason);})
}).listen(8888) // 监听 8888 端口

客户端

大体步骤:
建立于服务器 localhost:8888 的连接(上方监听了端口 8888) ⇒
发出对应的登录口令 ⇒
点击发送按钮将文本框内容获取,将其放在聊天框中并发送请求,随后清空文本 ⇒
收到服务器信息后展现在聊天框中

关键代码

let chatWindow = document.querySelector(".chat-window"), // 聊天框msgbox = document.querySelector("#my_msg"), // 输入框btn = document.querySelector("button"), // 发送按钮ws = new WebSocket("ws://localhost:8888"); // 与服务器建立连接if (window.WebSocket) {// 如果支持websocketws.onopen = () => {console.log("连接成功")// 发送对应口令以登录 在上面的 server端代码中,它们是 chatA token / chatB tokenws.send("chatA token")}ws.onclose = () => {console.log("连接关闭")}ws.onerror = () => {console.log("连接出错")}btn.addEventListener("click", (e) => {// 获取聊天框内容,向聊天框中添加后发送内容并清空聊天框let msg = msgbox.value;newMSG(msg, true)ws.send(msg)msgbox.value = ""})ws.onmessage = (e) => {newMSG(e.data)}function newMSG(msg, isSender = false) {let html = document.createElement("span")html.innerText = msghtml.classList = [isSender ? "senderMSG" : "reciverMSG"];chatWindow.appendChild(html)}}

效果展示

最终效果
另外一个客户端的代码 除了登录口令换成了 chatB token 其他都是一致的

全部代码

<!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>Document</title><style>html,body {width: 100%;height: 100%;padding: 0;margin: 0;color: #eee;background-color: black;}.fullbox {width: 100%;height: 100%;}.chat-window {height: 80%;width: 100%;border: #eee 1px solid;}.input-session {height: 19%;width: 100%;border: #eee 1px solid;display: flex;justify-content: space-between;align-items: center;}.input-session>textarea {width: 80%;height: 100%;border: #eee 1px solid;color: #eee;background-color: black;padding: 2% 6%;box-sizing: border-box;}.input-session>button {height: 100%;width: 20%;text-align: center;border-radius: 5px;color: #eee;background-color: blue;cursor: pointer;}span {display: block;padding: 10px 5px;color: #eee;border-radius: 5px;margin: 10px;width: fit-content;position: relative;}.senderMSG {text-align: right;right: 10;}.reciverMSG {text-align: left;left: 10;}</style>
</head><body><div class="fullbox"><div class="chat-window"></div><div class="input-session"><textarea name="msgbox" id="my_msg" cols="30" rows="10"></textarea><button>SEND</button></div></div><script>let chatWindow = document.querySelector(".chat-window"),msgbox = document.querySelector("#my_msg"),btn = document.querySelector("button"),ws = new WebSocket("ws://localhost:8888"); // connect to serverif (window.WebSocket) {// support websocketws.onopen = () => {console.log("连接成功")ws.send("chatA token")}ws.onclose = () => {console.log("连接关闭")}ws.onerror = () => {console.log("连接出错")}// add btn click eventbtn.addEventListener("click", (e) => {// add new element to chat window add send msg to scocketlet msg = msgbox.value;newMSG(msg, true)ws.send(msg)msgbox.value = ""})ws.onmessage = (e) => {newMSG(e.data)}function newMSG(msg, isSender = false) {let html = document.createElement("span")html.innerText = msghtml.classList = [isSender ? "senderMSG" : "reciverMSG"];chatWindow.appendChild(html)}}</script>
</body></html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65797.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js连接mysql出现错误

node.js连接mysql出现错误&#xff1a; ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client 目前是因为版本较高&#xff0c;最新的加密方式node还不支持 解决办法&#xff1a; 1、登录m…

GeneGPT:用领域工具增强大型语言模型,以改善对生物医学信息的访问

文章目录 一、论文关键信息二、主要内容1. Motivations2. 解决方案关键3. 实验和结果 三、总结与讨论 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题&#xff1a;GeneGPT: Augmenting Large Language Models with Domain …

怎么禁止计算机共享磁盘,访问限制,分享如何禁止别人访问你电脑的本地磁盘...

随着科技的快速发展&#xff0c;现在的小学生都用上手机了&#xff0c;更是有不少小孩子都会在电脑上玩游戏了&#xff0c;小学生玩LOL可是不少见。在小孩子玩电脑时&#xff0c;除了害怕他沉迷游戏&#xff0c;无心向学&#xff0c;还有就是担心熊孩子乱删电脑文件。如果误删了…

hosts配置 kentrl 网络禁止 访问

hosts禁止联网的工具 127.0.0.1 activate.navicat.com 127.0.0.1 syntevo.com www.syntevo.com #smartgit 127.0.0.1 release.gitkraken.com api.gitkraken.com GitKraken – 超好用的 Git 可视化工具 - 免费版本 “version”: “6.5.1”, “url_deb”: “https://release.axo…

QQ/微信里被禁止访问的网页怎么处理 被屏蔽的域名如何正常访问

最近越来越多的网站被微信的检测系统封杀&#xff0c;有的是确实违规&#xff0c;有的则是被误报了。出现这样的问题&#xff0c;网站的流量瞬间就清零了&#xff0c;对站长来说是天塌一样的打击&#xff0c;那我们有没有办法能够有效的防止域名被微信封杀呢&#xff1f; 一、先…

禁止访问某文件

1.web.config文件配置&#xff1a; 在Web.config文件 <system.web> <httpHandlers>添加一个节点 <system.web><httpHandlers><!--禁止访问IPData目录下的文本文件--><add path"IPData/*.txt" verb"*" type"System.…

用户登录 默认 计算机 用户文件,guest登录系统默认禁止guest访问本地计算机(组图)...

Win10共享文件夹&#xff0c;创建(启用)用户和共享文件&#xff0c;修改特定用户访问权限 内容 一、以访客身份登录 默认情况下&#xff0c;系统禁止访客访问本地计算机。如果允许访客用户访问&#xff0c;则需要进行以下设置&#xff1a; 1.打开访客账户。 图1.1 打开Guest用户…

禁止外部网络访问公司内网

PC0所在网段模拟公司内网&#xff0c;Server0模拟外部网络。 要求内网可以访问外部网络&#xff0c;但是外网不能连接内网 Router1 配置如下&#xff1a; interface FastEthernet0/0 ip address 192.168.10.254 255.255.255.0 duplex auto speed auto ! interface Serial2/0…

微信内链接已禁止访问是什么情况?微信链接防封细节

有时候我们在微信上浏览一些网址的时候会出现这样的情况,比如提示已停止访问该网页,其实提示这个也是为了广大用户的安全着想,毕竟有很多不法网址存在的,但是也由于错杀等原因导致打不开,点击链接提示已禁止访问几种原因是什么呢?那么碰到这种情况我们应该怎么做呢? 一…

为什么公司内部服务禁止访问外网?

文章目录 什么是访问外网&#xff1f;访问外网的风险什么业务场景需要申请外连公网&#xff1f; 上图网络访问分为两个方向&#xff1a; Internet&#xff08;外网&#xff09;访问公司网络 www.taobao.com&#xff1a;请求经路由转发后会到公司负载均衡服务器上&#xff0c;负…

手动禁止访问某些网页,告别摸鱼

手动禁止访问某些网页 开端解题思路逆向思维实现效果总结 开端 有一个不自觉地朋友&#xff0c;告诉我有了新电脑后很烦恼&#xff1a;速度快了&#xff0c;访问网页也快了&#xff0c;管不住自己的手……总在该专心学习工作的时候忍不住刷微博&#xff0c;或者追剧停不下来。…

GoogleChrome禁止访问端口解决

由于系统的版本迭代&#xff0c;从weblogic10.3.6升级到最新的weblogic14.1.1.0&#xff0c;在本地环境搭建创建weblogic域的时候&#xff0c;由于个人风采定义了一个端口为6666的端口&#xff0c;在一起部署完成&#xff0c;通过Google Chrome浏览器访问访问不到&#xff0c;提…

chatgpt赋能python:Python如何利用GPU加速

Python如何利用GPU加速 在大数据时代&#xff0c;数据处理和分析的速度越来越成为企业和个人必备的能力。然而&#xff0c;随着数据集的不断增大&#xff0c;计算机处理速度的瓶颈逐渐暴露出来。为此&#xff0c;GPU加速成为了解决这一问题的有效途径。 什么是GPU加速 GPU即…

国产Gpt究竟该如何使用?

说实话&#xff0c;当初ChatGPT横空出世我是不相信它可以进行专业知识的解答的&#xff0c;毕竟只是人为写出来的一个程序而已&#xff0c;但是当使用了一段时间以后&#xff0c;发现人工智能真的不是说说而已。发展到现在gpt3.5已经很可怕了&#xff0c;4.0又出了~~ 由于一些不…

【2023】分享国内外大厂开发主要AI网站

大厂原版 OpenAI ChatGPT 921 New Bing 415 Notion AI 90 百度文心一言 467 TruthGPT 105 讯飞星火认知大模型 141 进阶 Hugging Face 62 写作AI ​ Dyrt 394&#xff08;AI写作&#xff09; ​ DeepL Write 211&#xff08;写作翻译&#xff09; ​AI自动写文章 535 …

为了你的账户安全,此WeChat ID 不能登入Wechat网页版。你可以.......

问题&#xff1a;微信网页版无法登录了。针对某些公司不允许下载客户端&#xff0c;但是是在Windows系统下的工作&#xff0c;可以按照我的这个简单方法来解决。 尝试咨询微信客服&#xff0c;微信客服的回复是&#xff1a;目前微信对网页版微信进行了动态安全策略调整。如登录…

iMeta | 中科院生态中心邓晔组发布微生物组网络分析平台iNAP(图文/视频教程)

点击蓝字 关注我们 针对微生物组学研究的集成网络分析平台 https://doi.org/10.1002/imt2.13 2022/3/16 ● 2022年3月16日&#xff0c;中国科学院生态环境研究中心邓晔组在iMeta在线发表题为“iNAP: An integrated network analysis pipeline for microbiome studies”的方法类…

【微信篇】电脑版微信的照片视频文件位置变化

【微信篇】电脑版微信的照片视频文件位置变化 新版的微信视频图片更新了位置&#xff0c;感觉有好有坏吧&#xff0c;好的方面就是以后查找视频、图片、文档等可能更方便&#xff1b;不好就是越更新占用体积越大&#xff0c;还多很多数据&#xff0c;不懂是否流氓&#xff1f;…

【二】微信公众号之扫码关注后自动登录

​ 原来公司的官网就支持账号密码、手机验证码、QQ扫码授权、微信扫码授权等多种登录方式。昨天分享了微信公众号之扫码登录&#xff0c;今天接到需求说要为了咋们的公众号涨粉&#xff0c;要扫码后关注公众号后才可以登录&#xff0c;我一想这不是耍流氓嘛&#xff0c;登个网站…

综合实验 (NAT,ACL等配置)

一、实验要求 1、AR6理解为ISP设备&#xff0c;所连接的两个网段为公网&#xff1b;R1-R5构建为一个私有的局域网&#xff1b; 2、AR6上只能进行ip地址配置&#xff0c;之后不得对该路由器进行其他任何配置 3、公网范围IP地址已经指定&#xff0c;剩余R1-R5整个私网使用192.…