基于 Vue3 和 WebSocket 实现的简单网页聊天应用

这篇具有很好参考价值的文章主要介绍了基于 Vue3 和 WebSocket 实现的简单网页聊天应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先附上项目介绍,后面详细解释技术细节


1. chat-websocket

一个基于Vue3和WebSocket的简易网络聊天室项目,包括服务端和客户端部分。
项目地址 websocket-chat
下面是项目的主要组成部分和功能:

项目结构

chat-websocket/
|-- server/ # WebSocket 服务端
|   |-- run.js	# 服务端
|   |-- DBManager.js	#数据库对象管理
|-- src/
|   |-- components/
|   |   |-- ...  # Vue 组件
|   |-- assets/
|   |   |-- ...  # 静态资源
|   |-- views/
|   |   |-- Home.vue  # 主要视图组件
|   |   |-- Login.vue  # 登录视图组件
|   |-- router/
|   |-- App.vue
|   |-- main.js
|-- public/
|-- README.md
|-- ...

功能特性

  • 私聊功能:用户可以选择联系人进行一对一私聊,发送即时消息。
  • 群聊功能:用户可以加入群组,与群组成员进行群聊。
  • 修改用户名:用户可以在界面上直接修改自己的用户名。
  • 显示在线(连接)状态
  • 重新连接: WebSocket 断开连接后,用户可以重新连接服务器, 重新连接后, 会加载之前的聊天记录

技术栈

  • 前端框架: 使用 Vue3 作为前端框架,Element Plus 用于 UI 组件。

  • 后端框架: 后端使用 Node.js + Mysql 实现,使用 WebSocket 库 ws 作为 WebSocket 服务端。

  • WebSocket: 实时通信使用 WebSocket 技术,保证消息的实时性。


上面是项目介绍,下面介绍细节

2. 整体设计思路

  1. 前端使用Vue框架,快速搭建聊天室的原型,同时为了美观,使用Element Plus 用于 UI 组件.
  2. 前端页面 包含登陆页面Login和聊天页面Home
  3. 实时通信使用 WebSocket 技术,客户端发送请求,服务端结合数据库进行返回.
  4. 服务端使用Session机制,记录sessions[clientId],增加定时器定时清除session,用于24H过期机制.
  5. 服务端直接使用ws库建立连接,同时使用DBManager操作数据库对象,完成数据处理和传输.
  6. 为了方便消息分类传输,定义消息对象,客户端和服务端共有相同的消息对象.
    基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
    一次简单的登陆到获取消息的流程如图:

一次简单的发送和获取消息的流程如图:

3. 前端设计实现

3.1 页面设计实现

聊天室布局参考Element Plus提供的布局
基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
其中头部展示用户信息状态, 左边是群组和用户选择, 主界面就是聊天界面,展示聊天信息.
最终成品如下:
基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
一些细节解释

  1. 用户头像根据用户名自动生成,用到了ui组件.

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

  1. 可以显示用户当前连接状态,当链接断开后,可以重新连接.

  2. 聊天信息包含三要素: 时间, 用户名, 内容, 如图所示.通过v-if判断消息放在左边还是右边
    基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

  3. 发送栏固定,且接收和发送消息后聊天窗口(列表)自动到达底部.
    基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

3.2 登陆逻辑设计实现

进入页面后已经建立websocket连接,单击登陆后发送请求,若成功则接收到username,uid,session_id,这三个参数,直接以cookie的形式保存在本地.

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
后续进入页面,服务端都会 验证session,进行持久化访问.

3.3 聊天逻辑设计实现

  1. 前端共享使用相同的socket对象.

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

  1. 每次单击群组或用户,根据当前选择发送请求获取接收不同类型消息

    群组消息基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
    用户消息
    基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

  2. 还需要在进入页面后获取用户和群组列表进行初始化
    基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

  3. 无论是接收到群组还是用户消息,直接放入相同的列表,因为两种消息只需要显示三要素即可,后面分别解析
    基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

4. 后端设计实现

4.1 数据库设计实现

设计数据库包含如下表:
基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

表名 列名 数据类型 说明
USER uid INTEGER 用户ID(主键,自增)
name VARCHAR(255) 用户名
password VARCHAR(255) 用户密码
GROUPS gid INTEGER 群组ID(主键,自增)
name VARCHAR(255) 群组名
GMESSAGE id INTEGER 消息ID(主键,自增)
gid INTEGER 群组ID
uid INTEGER 发送消息的用户ID
gname VARCHAR(255) 群组名
text TEXT 消息内容
UMESSAGE id INTEGER 消息ID(主键,自增)
s_uid INTEGER 发送消息的用户ID
r_uid INTEGER 接收消息的用户ID
text TEXT 消息内容
time TIMESTAMP 消息发送时间
GROUP_USER uid INTEGER 用户ID
gid INTEGER 群组ID

还有与各表对应的管理类:
基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

各表分别继承管理类

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

这里使用 Promise 的方式可以更好地处理异步代码

4.2 服务端设计实现

  1. 导入所需的模块和类

    • entity.js: 包含了用户和消息的实体类定义。
    • DBManager.js: 包含了与数据库交互的相关类。
    • ws: WebSocket 模块。
    • 创建了一些表格和实体对象的实例,用于存储和管理用户、群组、消息等信息。
  2. 常量和变量定义

    • SESSION_EXPIRY_TIME: 定义了会话过期时间,以毫秒为单位,用于定期检查会话是否过期。
    • Ws: WebSocket 模块的别名。
    • clients: 存储WebSocket连接的对象。
    • sessions: 存储用户会话信息。
      基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
  3. 初始化WebSocket服务器

    • 定义一些事件处理函数,如handleOpenhandleClosehandleConnection等。
    • handleConnection中,处理了用户连接时的事件,包括消息的处理。
      基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
  4. 消息处理

    • handleMessage函数用于处理收到的消息。根据消息类型进行相应的操作,包括群组聊天、获取初始数据、私聊等。
    • 使用数据库表格对象(如groupTablegmessageTable等)进行消息的存储和查询。
    • 通过WebSocket向指定用户或群组发送消息。
      基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
  5. 用户登录

    • 当收到类型为MessageType.MESSAGE_LOGIN的消息时,处理用户登录逻辑。
    • 检查用户是否存在于数据库中,若不存在则插入新用户。
    • 为用户分配一个唯一的会话ID,将用户信息存储在sessions对象中。
    • 向客户端发送登录成功消息,并携带用户信息和会话ID。
      基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

sessions的保存形式如下:

                          sessions[clientId] = {
                            uid: uid,
                            username: msg.data.username,
                            ws: this,
                            creationTime: Date.now(),
                            sessionID: clientId,
                        };

定时器判断是否过期

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

5. 展示

群组聊天

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络
基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

私聊

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

基于 Vue3 和 WebSocket 实现的简单网页聊天应用,前端,websocket,网络协议,网络

5. 小结

孟宁老师上课旁征博引,时不时与同学们互动 (指让同学们发数字),无论是前端网络编程,网络协议RPC,还是Linux内核网络协议栈,似乎都信手拈来,相信如果认真听课,加上自己的钻研,绝对受益匪浅.

对于这门课程,完全可以说是师傅领进门,修行看个人了,我们深入其中某个方向,也会有所建树.

此前只是接触过JS和Vue,并未熟练掌握它们,这次由于课程原因,尝试完全使用JS作为前后端代码,没有使用熟悉的Python和Java来构建后端,算是对自己的一次挑战.幸好有chatgpt在细节上的协助,结合各类组件丰富的文档,完成了这次项目.文章来源地址https://www.toymoban.com/news/detail-770878.html

到了这里,关于基于 Vue3 和 WebSocket 实现的简单网页聊天应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何用简单的HTML代码实现滚屏播放的网页效果

    我写的走马灯 以上链接是我挂在github上的网页demo,大家可以先看一下效果。几个板块的内容会自动跑起来,当我们把鼠标移到某个板块上,就可以使滚动暂停,查看板块详情。点击板块,可以观看每个板块的视频。 html和javascript也可以实现这个效果,但本文介绍的主要是仅

    2024年02月12日
    浏览(33)
  • 简单的用Python抓取动态网页数据,实现可视化数据分析

    一眨眼明天就周末了,一周过的真快! 今天咱们用Python来实现一下动态网页数据的抓取 最近不是有消息说世界首富马上要变成中国人了吗,这要真成了,可就是历史上首位中国世界首富了! 那我们就以富豪排行榜为例,爬取一下2023年国内富豪五百强,最后实现一下可视化分

    2024年02月05日
    浏览(55)
  • web前端期末大作业——HTML+CSS简单的旅游网页设计与实现

    👨‍🎓静态网站的编写主要是用 HTML DⅣV+ CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉导航栏、鼠标划过效果等知识点,学生网页作业源码,制作水平

    2024年02月09日
    浏览(78)
  • Django学习记录:初步认识django以及实现了简单的网页登录页面的前后端开发

    1、可以先删去template文件夹,并在setting里面删掉这一行 2、在pycharm中创建app: 3、启动app:编写URL与视图函数关系【urls.py】 ​ 编写视图函数【views.py】 ​ 启动pycharm项目 4、引用静态文件 其中有两个文件的导入:(jquery和bootstrap) jquery:https://code.jquery.com/jquery-3.6.0.min.js 可

    2024年02月14日
    浏览(47)
  • 如何使用python实现简单爬取网页数据并导入MySQL中的数据库

    前言:要使用 Python 爬取网页数据并将数据导入 MySQL 数据库,您需要使用 Requests 库进行网页抓取,使用 BeautifulSoup 库对抓取到的 HTML 进行解析,并使用 PyMySQL 库与 MySQL 进行交互。 以下是一个简单的示例: 1.  安装所需库: ``` ``` 2.  导入所需库: ``` ``` 3.  建立数据库连接:

    2024年02月04日
    浏览(53)
  • 制作一个简单HTML校园网页(HTML+CSS)学校网站制作 校园网站设计与实现

    🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作

    2024年01月16日
    浏览(53)
  • 制作一个简单HTML旅游网站(HTML+CSS+JS)无锡旅游网页设计与实现8个页面

    👨‍🎓静态网站的编写主要是用 HTML DⅣV+ CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉导航栏、鼠标划过效果等知识点,学生网页作业源码,制作水平

    2024年02月10日
    浏览(60)
  • 使用vue3简单实现WebSocket通信

    关于WebSocket通信的简单介绍: 握手阶段:在建立WebSocket连接之前,客户端需要发送一个HTTP请求到服务器,请求升级为WebSocket协议。这个过程称为握手(Handshake)。如果服务器支持WebSocket协议,它将返回带有特定标头的HTTP响应,表示握手成功。 建立连接:客户端收到服务器的

    2024年02月16日
    浏览(37)
  • python简单网页爬虫

    正则匹配:难度较大,不建议 BeautifulSoup或者xpath:文档结构清晰【推荐】 实际使用常常是:BeautifulSoup或者xpath匹配到对应的dom节点,然后正则提取想要的数据 (1)BeautifulSoup : 安装: pip install lxml pip install bs4 使用: 爬取国家重点保护野生植物的信息,网站:中国珍稀濒危

    2024年02月08日
    浏览(41)
  • 制作一个简单HTML个人网页网页(HTML+CSS)源码

    一个简单的HTML网页,可用于大学html期末作业,照片都是网上找的 看一下成品图: 主页代码,这里的link href=\\\"images/css.css\\\" rel=\\\"stylesheet\\\" type=\\\"text/css\\\" /是引入css样的,images里面装的是css文件(完整源码见文末)  

    2024年02月11日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包