websocket实践与浅入浅出

news2024/9/22 15:49:55

websocket实践与浅入浅出

    • websocket与http的区别?
    • websocket的应用场景?
    • websocket通信方式
    • websocket协议结构
    • 分布式下IM多端同步的实现方案
    • TIP
      • 1. 心跳
      • 2. 多端同步
      • 3. wss
      • 4. other

websocket与http的区别?

Http:请求与响应的模式,属于“半双工”,服务端只能接收客户端的请求做出响应,无法主动推送数据。
websocket:服务端与客户端可以随时给对方发送信息,属于“全双工”,能够实现双方实时的推送数据。

websocket的应用场景?

实时推送数据(客户端->服务端,服务端->客户端)
如果没有websocket,http可以通过长轮询的方式,不停地发送请求去询问服务端是否有数据可以响应;但频繁的请求,会浪费双方的资源(CPU、带宽等)
项目实践:

  1. IM实时通信与多端同步
  2. 服务端的定制化推送服务

websocket通信方式

  1. 握手,利用 HTTP 协议实现连接握手,请求中进行“协议升级”,握手过程中,为了防止误连接进行一个Sec-WebSocket-Key的认证机制
  2. 通信,握手成功后,即可双工通信
  3. 心跳,即PING PONG,websocket中最好有心跳来维持服务端与客户端的长连接通信,避免被网关等误以为无效连接;可以通过websocket本身协议配合,或者直接客户端/服务端发起心跳来维持
  4. 关闭,客户端或服务端发送关闭的信号,亦或者是一些意外导致强制关闭

websocket协议结构

websocket协议

  1. FIN:消息结束的标志位;
  2. RSV:预留字段,为0;
  3. opcode:操作码(类型),1表示帧内容是纯文本,2表示帧内容是二进制数据,8表示关闭连接,9表示连接保活的PING ,10表示连接保活的PONG;
  4. MASK:是否使用异或来进行掩码;客户端发送数据必须使用掩码,而服务器发送则必须不使用掩码
  5. Payload len:帧内容的长度
  6. Extended payload length:扩展字段
  7. Masking-key:如果MASK需要掩码,则为4 个字节的随机数
  8. Payload Data:帧内容

分布式下IM多端同步的实现方案

2022-12-7-im多端同步-V2.png

  1. websocket多端与后端服务建立连接
  2. redis存储会话信息与会话状态
  3. websocket发起IM通信
  4. server接收IM消息,投递到mq
  5. mq进行广播,多server订阅
  6. 在redis查找存活状态的业务会话,server除发起方的websocket,找到当前server有效的websocket进行数据的同步

TIP

1. 心跳

  1. 如果没有心跳,通过控制台强制杀客户端进程,或者是断网,会导致服务端没办法知道客户端已“异常”关闭;所以需要有“心跳”来维持这个状态,服务端主动或被动的维护websocket session的状态(调度清除无用session或心跳回复后的懒清除)

2. 多端同步

  1. 关于多端同步,websocket的通信是端对端的,对于服务端来说,服务一般是集群的,而不是单机的方式,而websocket的session无法序列化,无法通过分布式的组件来存储并序列化session,如果需要考虑多端消息同步,只能通过广播的方式,通知给每一台服务端,由各自的服务端发起websocket请求。
  2. 多端同步过程中,rocketmq是没办法同时使用顺序方式+广播模式;原因是广播模式是不加锁的与顺序方式冲突,顺序方式虽然是同一个queue,但如果采用顺序方式+分布式模式,那么多个消费者线程会同时处理同个队列,也会导致虽然生产端数据同步,但消费者多端同步时数据乱序;
    解决方案是:采用顺序方式+分布式模式,消费端只限制一个消费者线程(保证消费数据也能够是顺序的),只要保证某个会话是顺序的,那么可以使用线程池并进行线程复用与分片,利用多线程,提高消费端不同会话的处理能力。

3. wss

  1. 关于wss:类似https,多个s即多个证书,证书对通信进行加密,避免通信过程中直接裸露在网络上,可在nginx上配置。

4. other

  1. 关于websocket最大的长度:没什么受限,但是用的组件(例如tomcat或者springboot可能会有限制长度)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园招聘信息管理系统64f99

这个选题的话其实有很多的,就看你自己能接受怎么样的,比如可以做网站类、系统类、小程序类、安卓app、大数据类等等,这个也要看你个人能力和技术问题,如果技术小白或者有一点点基础的话建议选择网站类和系统类的,如果有…

关于NDK

libc_shared.so 在目前ndk的最新版本25.1.8937393中有4个libc_shared.so,用Everything搜索结果如下: 可以看到,大小最小的有4M多。 对于libc库,官方介绍在此,摘取一些片段如下: LLVM 的 libc 是 C 标准库…

[附源码]Python计算机毕业设计Django养生药膳推荐系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java学习多态之向下转型

目录 语法 注意事项 一、 二、 三、 举例说明 注意事项第二条的解释 总结 向下转型:解决向上转型中不能调用子类特有成员的问题 语法 子类类型 引用名 (子类类型)父类引用; 注意事项 一、 只能强转父类的引用&#x…

Windows子系统WSL2 (ubuntu安装 docker、nvidia-docker)

文章目录一、准备二、安装WSL2三、安装docker nvidia-docker附录:WSL与linux路径映射一、准备 第一步:【win R】输入winver 检查你的 Windows 版本,验证内部版本是否低于19041, 升级系统选择Dev 渠道 第二步:【控制面板】>…

基于RRT算法的最优动力学路径规划(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 RRT是Steven M. LaValle和James J. Kuffner Jr.提出的一种通过随机构建Space Filling Tree实现对非凸高维空间快速搜索的算法。…

这款台灯,不仅能护眼,还能点读和互动

疫情反复,孩子不能正常返校 天天在家上网课、写作业 长时间用眼引发视疲劳 用眼健康需要格外关注 想要改善孩子的用眼环境 CTWing物联网市场推荐使用 好记星智能学习台灯 国AA级护眼标准,能点读,会说话 这款智能学习台灯好在哪里&…

旅游网站毕业设计,旅游网站网页设计设计源码,旅游网站设计毕业论文

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的景区景点购票系统,整个网站项目使用了B/S架构,基于python的Django框架下开发;管理员通过后台录入信息、管理信息,设置网站信息,管理会…

186页13万字智慧能源大数据分析平台建设方案

目录 智慧能源大数据分析平台及能源集团数字化平台建设方案 目录 一、相关项目背景 二、需求理解 2.1 需求理解 三、方案设计 3.1 整体方案设计 3.3.1 整体架构 3.3.2 解决方案说明 3.3.3 需求应答 3.2 数据仓库 3.2.1 数据仓库架构 3.2.2 数据仓库产品说明 3.2.3…

高通平台开发系列讲解(AI篇)SNPE工作流程介绍

文章目录 一、转换网络模型二、量化2.1、选择量化或非量化模型2.2、使用离线TensorFlow或Caffe模型2.3、使用非量化DLC初始化SNPE2.4、使用量化DLC初始化SNPE三、准备输入数据四、运行加载网络沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍SNPE模型工作…

十万部冷知识:为什么会有点球大战?

在上一部的“冷知识”当中,我们跟大家提到了在小组赛中决定排名的方法,比到最后哪哪都平的情况下,甚至都会以抽签的方式决定。 但是到了淘汰赛里,往往就不会这么儿戏了。双方在常规时间和加时赛都打平的情况下,会直接进…

《自己动手写CPU》学习记录(1)——第1章

引言 此专栏的文章记录自己学习《自己动手写CPU》的过程。算是一个学习笔记,里面也会夹杂个人的思考以及代码编写。希望自己可以像作者一样,坚持到最后。加油~~ 本篇学习MIPS32处理器的基本架构。 致谢 感谢书籍《自己动手写CPU》及其作者雷思磊。一…

注册ChatGPT全攻略

参考: 最近ChatGPT很火,但有人注册会经常出现不服务当区域问题,现在把手教你解决。 准备 代理,要求是,韩国,日本,印度,新加坡,美国这几个地址。其他的不太清楚,反正香港…

开关电源环路稳定性分析(03)-开环电源

大家好,这里是大话硬件。 在前面的章节中,分析了开关电源为什么需要闭环环路控制,并且得出了开关电源需要稳定可靠,就必须增加环路控制的结论。虽然目前开关电源环路控制的方法很多,但是较常用的是电压控制方式。 这一…

联表查询之交叉连接、内、外连接

目录 1、交叉连接(笛卡尔积) 2、内连接 2.1 显示内连接(inner join) 2.2 隐示内连接 2.3 内连接的练习 2.3.1 查询第一或者二学期中所有的学生 2.3.2 查询第一和第二期所有的学生 2.3.3 查询每个班级下的学生总数,…

目标检测 YOLO5部署安装测试

一、下载模型 yolov5: 同步更新官方最新版 Yolov5 ,发行版提供模型下载地址 (gitee.com)https://gitee.com/monkeycc/yolov5?_fromgitee_search二、导入需要的包 pip install -r requirements.txt -i https://pypi.douban.com/simple/三、下载模型yolov5s.pt放到根…

Java进阶——多线程基础

文章目录线程基础1、线程介绍1.1、线程相关概念2、线程基本使用创建线程的两种方式:2.1、 继承Thread 类,重写run方法2.2、实现Runnable接口,重写run方法2.3、多线程的简单演示:2.4、继承Thread 和实现Runnable 的区别2.5、线程终…

基于鲸鱼算法优化的lssvm回归预测-附代码

基于鲸鱼算法优化的lssvm回归预测 - 附代码 文章目录基于鲸鱼算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于鲸鱼算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对…

行列式基础

进阶版:(努力更新中) 二阶行列式 我们先来看看二元一次方程。 {a1,1x1a1,2x2b1a2,1x2a2,2x2b2\left\{ \begin{matrix} a_{_{1,1}} x_{_1} a_{_{1,2}} x_{_2} b_{_1} \\ \\ a_{_{2,1}} x_{_2} a_{_{2,2}} x_{_2} b_{_2} \end{matrix} \ri…

[附源码]计算机毕业设计葡萄酒销售管理系统论文Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…