使用WebSocket实现答题积分排名实时更新的功能

devtools/2024/9/22 16:05:32/

需求分析

接到一个需求,是一个答题积分小程序,其中有一个功能需求是需要实时更新答题积分排名的。之前通常比较常见的需求,都是指定某个时间点才更新答题排行榜的数据的。

经过技术调研,要实现答题积分排名实时更新的功能,有两种解决方案:

1、http请求轮询的方式;

2、使用WebSocket建立长连接;

其中,WebSocket是HTML5提供的在WEB应用程序中客户端和服务器端之间进行的非HTTP的通信机制。使用WebSockets建立的连接是实时的,也是永久的,除非被显示关闭。

无论是性能上还是效率上,第二种方案无疑优于第一种方案。

实现效果:

WebSocket的使用场景

WebSocket适用于多个客户端和一个服务器端实现实时通信的场合,例如:

  • 多人在线答题pk
  • 实时得分排行榜
  • 在线聊天室
  • 实时体育或者新闻评论网站
  • 实时交互用户信息的社交网站
  • ......

使用postman测试WebSocket接口

在后端写完接口后,使用postman测试WebSocket接口,调通后没问题了才进行写前端代码实现。

WebSocket的使用

在前端使用WebSocket通信,基本代码结构如下:

// WebSocket构造函数,创建WebSocket对象
let ws = new WebSocket('ws://localhost:8888')// 连接成功后的回调函数
ws.onopen = function (params) {console.log('客户端连接成功')// 向服务器发送消息ws.send('hello')
};// 从服务器接受到信息时的回调函数
ws.onmessage = function (e) {console.log('收到服务器响应', e.data)
};// 连接关闭后的回调函数
ws.onclose = function(evt) {console.log("关闭客户端连接");
};// 连接失败后的回调函数
ws.onerror = function (evt) {console.log("连接失败了");
};// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,这样服务端会抛异常。
window.onbeforeunload = function() {ws.close();
}

通过readyState来获取WebSockets的连接状态:

CONNECTING:值为0,代表正在连接;
OPEN:值为1,代表里已经连接;
CLOSING:值为2,代表正在关闭;
CLOSED:值为3,代表已关闭。


http://www.ppmy.cn/devtools/5937.html

相关文章

文心一言vsGPT-4全面对比

文心一言和GPT-4都是当前非常先进的人工智能语言模型,它们各自具有独特的特点和优势。以下是对这两款工具的全面比较: 文心一言是由百度开发的一款大型人工智能语言模型,它基于强大的深度学习技术和海量的数据资源,具备出色的语言…

LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略

LLMs之Llama3:Llama 3的简介、安装和使用方法、案例应用之详细攻略 导读:2024年4月18日,Meta 重磅推出了Meta Llama 3,本文章主要介绍了Meta推出的新的开源大语言模型Meta Llama 3。模型架构 Llama 3 是一种自回归语言模型&#x…

【ZBrush】制作章鱼练习 02——足部

本篇效果 步骤 笔刷工具选择“Move” 按下X键激活对称,然后往外拉 这里拉出6条腿的基底 笔刷工具选择“CurveTube” 绘制腿,可以发现此时腿部起始点和终点的粗细一样,但是真实的章鱼腿部应该是根部较粗,脚部较细 因此我们先回撤一…

OpenHarmony安全控件类型的UI控件(仅对系统应用开放)

介绍 本示例提供了安全控件类型的UI控件,支撑应用开发者集成安全控件做临时授权场景,当用户实际点击了某种类型的安全控件时,会对应用进行相应的临时授权,减少权限弹窗对用户的干扰,同时提供更小的授权范围。 效果预…

学习 Rust 的第三天:如何编写一个猜数字的游戏

欢迎来到学习 Rust 的第三天!我参考的是 Steve Klabnik 的《Rust 编程语言》一书。今天我们要用 Rust 来制作一个猜数字的游戏。 引言 我们将创建一个游戏,它会在 1 到 100 之间随机选择一个数字,用户需要猜出这个数字,猜对了就…

JAVA程序设计-对象设计

无论是根据某马还是某谷的适配教程做项目时候,发现了大部分都是重复的crud,大部分只要做好笔记复习即可,但是却往往忘记了编码设计,所以这里开始复习编码设计,对象设计中,长期使用Mp的那一套导致就是Service Mapper,一套梭哈完了,这样很容易忘记基本功夫 POJO: 简单…

Python基于Django搜索的目标站点内容监测系统设计,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

<计算机网络自顶向下> TCP拥塞

目录 TCP拥塞控制机制 TCP拥塞感知 TCP速率控制方法 TCP拥塞控制和流量控制的联合动作 TCP拥塞控制策略 TCP吞吐量 TCP公平性 TCP拥塞控制机制 端到端的拥塞控制机制 路由器不向主机提供有关拥塞的反馈信息 路由器负担较轻 符合网络核心简单的TCP/IP架构原则 端系统根据自…