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

news/2024/9/22 20:16:13/

需求分析

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

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

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/news/1427839.html

相关文章

CSS-布局

display display 属性是用于控制 布局 的最重要的 CSS 属性。display 属性规定是否/如何显示元素。 每个 HTML 元素都有一个默认的 display 值,具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline。 block block:块级元素。块级…

ElasticSearch有账号密码时: kibana配置

上一篇文章我们介绍过ElasticSearch关闭账号密码的的方式: config/elasticsearch.yml文件中 xpack.security.enabled: false 当我们关闭 账号密码,kibana是可以直接访问ElasticSearch的。 真实项目中,我们是不允许数据库裸跑的,所…

Go 单元测试之Mysql数据库集成测试

文章目录 一、 sqlmock介绍二、安装三、基本用法四、一个小案例五、Gorm 初始化注意点 一、 sqlmock介绍 sqlmock 是一个用于测试数据库交互的 Go 模拟库。它可以模拟 SQL 查询、插入、更新等操作,并且可以验证 SQL 语句的执行情况,非常适合用于单元测试…

Qwen量化脚本run_gptq.py解析

Qwen量化脚本run_gptq.py解析 代码路径 https://github.com/QwenLM/Qwen/ run_gptq.py路径 https://github.com/QwenLM/Qwen/blob/main/run_gptq.py 代码解析: import argparse import json from typing import Dict import loggingimport torch import transfor…

C++:范围-based for 循环

范围-based for 循环是 C11 引入的一种循环语法,它简化了遍历容器和数组等序列的操作,使代码更加清晰和简洁。它通常用于遍历容器类(如数组、向量、列表等)中的元素,或者以范围的形式遍历初始化列表。 范围-based for …

学习大数据,所需要的linux基础(1)

文章目录 linux入门概述Linux和Windows的区别CentOS下载地址 Linux文件与目录结构Linux文件Linux目录结构 VI/VIM编辑器vi/vim是什么测试数据集准备一般模式编辑模式指令模式模式间转换 网络配置和系统管理操作查看网络IP和网关配置网络和ip地址ifconfig配置网络接口修改ip地址…

模型 框架效应

系列文章 分享 模型,了解更多👉 模型_思维模型目录。部分真相不等于真相。 1 框架效应的应用 1.1 框架效应在营销策略上的应用 亚洲航空公司面临的挑战是如何在竞争激烈的航空市场中吸引更多的顾客,并提高机票的预订率。这家低成本航空公司…

深度学习 Lecture 9 信息增益、One-hot、回归树、集成树、随机森林、XGBoost模型

一、信息增益(Information Gain) 决定使用什么特征来划分一个节点取决于什么样的特征选择最能减少熵(也就是使纯度最大化) 在决策树中,熵的减少被称为信息增益。 所以如何选择呢? 假设现在有三个特征可以选择&#…