webSocket+Node+Js实现在线聊天(包含所有代码)

这篇文章主要介绍了如何使用 webSocket、Node 和 Js 实现在线聊天功能。 重要亮点

💻 技术选型:使用 Node.js 搭建服务器,利用 Express 框架和 Socket.io 库实现 WebSocket 通信。

📄 实现思路:通过建立数组存储聊天记录,在页面加载时发送连接请求,发送消息时广播给其他用户,前端使用 JQ 操作 DOM。

✍ 代码示例:提供了完整的代码示例,包括服务器端和客户端的实现。

webSocket+Node+Js实现在线聊天

一、首先我们需要创建一个index.js,写有关于node服务的逻辑代码,其中使用了express和socket。

二、这个时候,我们的node服务已经搭建好了,socket服务也启动了。
1、socket使用很简单
2、我们声明一个数组用来保存当前所有的聊天记录
在这里插入图片描述

3、首次进入页面的时候会主动发送socket信息
在这里插入图片描述

4、当我们发送消息的时候,其他人也可以收到对应的消息
在这里插入图片描述

5、前端使用了JQ用来操作dom,使用在线的socket连接后端的端口地址
在这里插入图片描述

三、输入用户名、输入要发送的文字、直接发送即可
在这里插入图片描述
四、对应代码

index.js

const express = require('express')
// const path = require('path')
const app = express()let port = 3333
// app.use(express.static(path.join(__dirname, 'public')));
// app.get('/', (req, res, next) => {
//     res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })
//     // res.end('欢迎来到express')
//     next()
// })
const server = app.listen(port, () => { console.log('成功启动express服务,端口号是' + port) })//引入socket.io传入服务器对象 让socket.io注入到web网页服务
const io = require('socket.io')(server);
let arr = [{user:'系统消息',info:'恭喜链接websocket服务成功......'
}]
io.on('connect', (websocketObj) => {  //connect 固定的  console.log("====================")//链接成功后立即触发webEvent事件websocketObj.emit('webEvent', JSON.stringify(arr));//监听前端触发的 sendFunEvent  事件 websocketObj.on('sendFunEvent', (webres) => {console.log(webres, 'webreswebres')arr.push(webres)//触发所以的 sendFunEventCallBack 事件  让前端监听io.sockets.emit("sendFunEventCallBack", JSON.stringify(arr));})
})

index.html

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!-- 通过script的方式引入 soctke.io --><!-- //不成功就使用最新版本的 直接百度 cdn socket.io --><script crossorigin="anonymous"integrity="sha512-xbQU0+iHqhVt7VIXi6vBJKPh3IQBF5B84sSHdjKiSccyX/1ZI7Vnkt2/8y8uruj63/DVmCxfUNohPNruthTEQA=="src="https://lib.baomitu.com/socket.io/4.6.1/socket.io.js"></script><!-- 为了操作dom方便我也引入了jq --><script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script><title>myWebsocket</title><style>body {position: relative;}.zzzz {position: fixed;top: 20px;left: 20px;}.myBoxChild{margin-top: 60px;}.aaa{padding-left: 30px;}</style>
</head><body><div class="myBox"><div class="zzzz"><input class="name" placeholder="用户名" type="text"><input class="inp" placeholder="请输入" type="text"><button onclick="sendFun()">发送</button></div><div class="myBoxChild"></div></div><script>//页面打开自动链接 http://localhost:3000 后端服务let mySocket = io("http://127.0.0.1:3333") //直接写后端服务地址//一直在监听webEvent 这个事件mySocket.on('webEvent', (res) => {window.alert(JSON.parse(res)[0].info)})mySocket.on('sendFunEventCallBack', (res) => {console.log(res, 'sendFunEventCallBackRes')let data = JSON.parse(res)let str = ''for (let i = 0; i < data.length; i++) {str += `<p class="aaa">${data[i].user}: ${data[i].info}</p>`}$('.myBoxChild')[0].innerHTML = str})//获取input的输入内容//将来传给服务器function sendFun() {if ($('.myBox .inp').val() != '') {mySocket.emit('sendFunEvent', {info:$('.myBox .inp').val(),user:$('.myBox .name').val()})setTimeout(() => {$('.myBox .inp').val('')})} else {alert('输入字符')return}}</script>
</body></html>

全部代码:
webSocket+Node+Js实现在线聊天(包含所有代码)

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

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

相关文章

Linux 软件包管理器 yum的下载、功能介绍及使用

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 Linux下的三种软件安装方…

项目如何有效做资源管理?易趋项目管理软件让资源管理可视化

在项目管理的过程中&#xff0c;有效的资源管理能够确保资源得到合理的分配和使用&#xff0c;避免资源的浪费和冗余&#xff0c;进而提高整体工作效率、确保项目的成功&#xff1b;同时降低组织的运营成本。 但在项目推进过程中&#xff0c;项目经理总会面临各种资源管理的难…

MyBatis从入门到“入土“

&#x1f495;喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#xff01;&#x1f495;(●◡●) 目录 一、Mybatis为何物&#xff1f;&#x1f44c; 二、快速入门&#x1f923; 1、新建项目&#x1f60a; 2、数据库建表&#x1f60a; 3、导入依赖的jar包&#x1f60a;…

vue3 路由跳转 携带参数

实现功能&#xff1a;页面A 跳转到 页面B&#xff0c;携带参数 路由router.ts import { createRouter, createWebHistory } from "vue-router";const routes: RouteRecordRaw[] [{path: "/demo/a",name: "aa",component: () > import(&quo…

【软件设计师】2018年的上午题总结

2018 2018上半年2018下半年 2018上半年 1.小阶向大阶对齐 2.吞吐率是最长流水段操作时间的倒数 3.ssh的端口号是22 4.s所发送的信息使用s的私钥进行数字签名&#xff0c;t收到后使用s的公钥验证消息的真实性 5.数据流分析是被动攻击方式 6.《计算机软件保护条例》是国务院颁布…

226.翻转二叉树

翻转一棵二叉树。 思路&#xff1a; 指针做交换 用递归&#xff08;前序or后序&#xff0c;中序不行&#xff09; 前序&#xff1a;中左右 遍历到“中”的时候&#xff0c;交换它的左右孩子 然后分别对它的左孩子和右孩子使用“交换函数”&#xff08;定义的&#xff09;&a…

【论文阅读】使用深度学习及格子玻尔兹曼模拟对SEM图像表征粘土结构及其对储层的影响

文章目录 0、论文基本信息1、深度学习2、可运行程序—Matlab3、深度切片3、LBM模拟4、局限性 0、论文基本信息 论文标题&#xff1a;Characterizing clay textures and their impact on the reservoir using deep learning and Lattice-Boltzmann simulation applied to SEM i…

Python-温故知新

1快速打开.ipynb文件 安装好anaconda后&#xff0c;在需要打开notebook的文件夹中&#xff0c; shift键右键——打开powershell窗口——输入jupyter notebook 即可在该文件夹中打开notebook的页面&#xff1a; 2 快速查看函数用法 光标放在函数上——shift键tab 3...

CGAN|生成手势图像|可控制生成

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;TensorFlow入门实战&#xff5c;第3周&#xff1a;天气识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 CGAN&#xff08;条件生成对抗网络&#xf…

【Crypto】Rabbit

文章目录 一、Rabbit解题感悟 一、Rabbit 题目提示很明显是Rabbit加密&#xff0c;直接解 小小flag&#xff0c;拿下&#xff01; 解题感悟 提示的太明显了

二分查找

题目链接 题目: 分析: 如果按照从头到尾的顺序一次比较, 每次只能舍弃一个元素, 效率是非常低的, 而且没有用到题目的要求, 数组是有序的因为数组是有序的, 所以如果我们随便找到一个位置, 和目标元素进行比较, 如果大于目标元素, 说明该位置的右侧元素都比目标元素大, 都可…

一键恢复安卓手机数据:3个快速简便的解决方案!

安卓手机作为我们不可或缺的数字伙伴&#xff0c;承载着大量珍贵的个人和工作数据。然而&#xff0c;随着我们在手机上进行各种操作&#xff0c;不可避免地会遇到一些令人头痛的问题&#xff0c;比如意外删除文件、系统故障或其他不可预见的情况&#xff0c;导致重要数据的丢失…

汽车生产线中的工业机器人应用HT3S-PNS-ECS(EtherCAT/Profinet)协议转换通讯方案案例分析

汽车生产线中的工业机器人应用HT3S-PNS-ECS(EtherCAT/Profinet)协议转换通讯方案案例分析 ——北京中科易联科技有限公司供稿—— 一、摘要 随着工业自动化的快速发展&#xff0c;汽车生产线对工业机器人的依赖日益增加。HT3S-PNS-ECS作为工业机器人中的关键组件&#xff0c;其…

OpenFeign快速入门 替代RestTemplate

1.引入依赖 <!--openFeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡器--><dependency><groupId>org.spr…

重学java 38.创建线程的方式⭐

It is during our darkest moments that we must focus to see the light —— 24.5.24 一、第一种方式_继承extends Thread方法 1.定义一个类,继承Thread 2.重写run方法,在run方法中设置线程任务(所谓的线程任务指的是此线程要干的具体的事儿,具体执行的代码) 3.创建自定义线程…

响应式处理-一篇打尽

纯pc端响应式 pc端平常用到的响应式布局 大致就如下三种&#xff0c;当然也会有其他方法&#xff0c;欢迎评论区补充 将div height、width设置成100% flex布局 flex布局主要是将flex-wrap: wrap&#xff0c; 最后&#xff0c;你可以通过给子元素设置 flex 属性来控制它们的…

c4d云渲染是工程文件会暴露吗?

在数字创意产业飞速发展的今天&#xff0c;C4D云渲染因其高效便捷而备受欢迎。然而&#xff0c;随着技术应用的深入&#xff0c;人们开始关注一个核心问题&#xff1a;在享受云渲染带来的便利的同时&#xff0c;C4D工程文件安全吗&#xff1f;是否会有暴露的风险&#xff1f;下…

【30天精通Prometheus:一站式监控实战指南】第4天:node_exporter从入门到实战:安装、配置详解与生产环境搭建指南,超详细

亲爱的读者们&#x1f44b;   欢迎加入【30天精通Prometheus】专栏&#xff01;&#x1f4da; 在这里&#xff0c;我们将探索Prometheus的强大功能&#xff0c;并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。&#x1f680;   Prometheus是云原生和DevOps的…

绿联硬盘数据恢复方法:安全、高效找回珍贵数据

在数字化时代&#xff0c;硬盘承载着大量的个人和企业数据&#xff0c;一旦数据丢失或损坏&#xff0c;后果往往不堪设想。绿联硬盘以其稳定的性能和良好的口碑赢得了众多用户的信赖&#xff0c;但即便如此&#xff0c;数据恢复问题仍然是用户可能面临的一大挑战。本文将为您详…

炫酷网页设计:HTML5 + CSS3打造8种心形特效

你以为520过去了&#xff0c;你就逃过一劫了&#xff1f;那不是还有分手呢&#xff0c;那不是还得再找对象呢&#xff0c;那不是还有七夕节呢&#xff0c;那不是还有纪念日呢&#xff0c;那不是还有各种各样的节日呢&#xff0c;所以呀&#xff0c;这8种HTML5 CSS3打造8种心形…