网站首页 > 博客文章 正文
需求分析
接到一个需求,是一个答题积分小程序,其中有一个功能需求是需要实时更新答题积分排名的。之前通常比较常见的需求,都是指定某个时间点才更新答题排行榜的数据的。
经过技术调研,要实现答题积分排名实时更新的功能,有两种解决方案:
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,代表已关闭。
猜你喜欢
- 2024-10-02 还在手工写接口测试文档,已经out了
- 2024-10-02 从零单排,使用 Netty 构建 IM 聊天室
- 2024-10-02 K8s Ingress 解决 “长连接” 负载不均衡的问题
- 2024-10-02 GraphQL的简单应用(graphql入门)
- 2024-10-02 Axios 并发请求完全指南 - 3 种实现解析
- 2024-10-02 Spring Boot Bean注入的常见方式与应用场景
- 2024-10-02 postman-Workspaces工作空间 VS Scratch Pad草稿面板
- 2024-10-02 新型开源postwoman接口调试工具VS传统经典postman和crapAPI工具
- 2024-10-02 Postman收费太贵了,我决定用Postwoman...
- 2024-10-02 深入浅出:WebSocket 鉴权的实践(websocket 鉴权方案)
你 发表评论:
欢迎- 07-08Google Cloud Platform 加入支持 Docker 的容器引擎
- 07-08日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 07-08美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- 07-08GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 07-08谷歌推出Cloud Dataproc,缩短集群启动时间
- 07-08Infovista与Google Cloud携手推进射频网络规划革新
- 07-08比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- 07-08BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- 最近发表
-
- Google Cloud Platform 加入支持 Docker 的容器引擎
- 日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 谷歌推出Cloud Dataproc,缩短集群启动时间
- Infovista与Google Cloud携手推进射频网络规划革新
- 比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- NCSA和Google Cloud合作开发AI驱动的网络防御系统,加强泰国网络空间的安全性
- SAP将在沙特阿拉伯 Google Cloud 上推出BTP服务
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)