分布式websocket IM聊天系统相关问题问答【第九期】

前言

上期视频讲解了自己关于聊天系统的设计的时候出现了一些不一样的声音。不了解情况的可以看上上期视频。这期主要是讨论。IM聊天系统设计方案多。我的先说明一下自己的技术背景互相之间才能更好的理解。
本期对应视频

目前已经写的文章有。并且有对应视频版本。
git项目地址 【IM即时通信系统(企聊聊)】点击可跳转
sprinboot单体项目升级成springcloud项目 【第一期】
前端项目技术选型以及页面展示【第二期】
分布式权限 shiro + jwt + redis【第三期】
给为服务添加运维模块 统一管理【第四期】
微服务数据库模块【第五期】
netty与mq在项目中的使用(第六期)】
分布式websocket即时通信(IM)系统构建指南【第七期】
分布式websocket即时通信(IM)系统保证消息可靠性【第八期】

回答问题一 消息可靠机制和接收方有什么关系。

回答这个童鞋的问题。咱们让GPT来回答一下。这个是我们公司正在使用的GTP4工具,感兴趣的话可以给小伙伴们分享一下。
在这里插入图片描述

在这里插入图片描述
我的系统中使用到了消息确认和消息重传。童鞋下图的也是一种设计思路,通过长轮询。不过我这里使用的是ws推送。你的模型相当于是拉取消息。我是推送。没有谁对谁错之分。都是对的。后面如果网友感兴趣我可以两种模型都分享一下。还有很多设计方案,还有数据不落库的等等。像微信聊天记录都是存储在本地的。
在这里插入图片描述

回答问题二 http 与ws在这里插入图片描述

在这里插入图片描述

WebSocket (WS) 协议

  • 全双工通信:WebSocket提供了全双工通信能力,允许服务器和客户端之间进行双向实时通信。
  • 持久连接:一旦WebSocket连接建立,它会保持开放状态,直到客户端或服务器明确地关闭连接。
  • 实时性:WebSocket非常适合需要实时通信的应用,如IM聊天系统,因为它可以立即将消息推送给用户B。
  • 消息发送流程:用户A发送消息 -> 服务器接收并处理消息(可能包括落库)-> 服务器通过WebSocket连接将消息推送给用户B。

HTTP 协议

  • 半双工通信:HTTP是基于请求-响应模式的,通常是客户端发送请求,服务器响应请求。
  • 非持久连接:HTTP/1.1虽然支持持久连接,但每个请求/响应交换后连接可能会关闭,而HTTP/2提供了多路复用。
  • 轮询/长轮询:在WebSocket出现之前,IM系统可能使用HTTP轮询或长轮询来模拟实时通信,但这会增加延迟和服务器负载。
  • 消息发送流程:用户A发送消息(HTTP请求)-> 服务器接收并处理消息(可能包括落库)-> 服务器响应用户A的请求 -> 用户B定期轮询服务器以获取新消息。

在IM聊天系统中,WebSocket协议通常是更好的选择,因为它提供了更低的延迟和更高效的服务器资源利用。HTTP轮询机制在没有WebSocket的情况下是一个备选方案,但它的实时性和效率通常不如WebSocket。

这个是关于http和ws的一个对比。

回答问题3 分布式情况下channel怎么共享。

在这里插入图片描述

在这里插入图片描述

在分布式系统中,Netty的Channel实例不能直接在不同的Netty服务器之间共享,因为Channel代表的是一个到具体客户端的活跃连接,它是与特定的JVM和网络套接字绑定的。不过,可以通过一些设计模式和中间件来实现类似“共享”的效果,以便在分布式Netty服务器之间传递消息。

以下是一些实现分布式Netty服务器间通信的策略:

  1. 消息队列(如RabbitMQ, Kafka):可以使用消息队列作为中间件来在不同服务器间传递消息。当一个Netty服务器接收到消息并需要将其传递给另一个服务器上的客户端时,它可以将消息发布到消息队列中。另一个服务器可以订阅这些消息,并将其发送到相应的客户端。

  2. 发布/订阅系统(如Redis Pub/Sub):类似于消息队列,发布/订阅系统允许服务器发布消息到一个通道,其他服务器订阅这个通道并接收消息,然后将消息转发给本地连接的客户端。

  3. 集群管理(如ZooKeeper, etcd):这些工具可以帮助管理分布式系统中的状态和配置,包括Netty服务器的信息。虽然它们不直接处理消息传递,但可以用来跟踪哪些客户端连接到哪个服务器,以及如何路由消息。

  4. 分布式缓存(如Hazelcast, Ignite):分布式缓存可以用来存储和共享数据,包括用户的会话信息和状态。这样,即使客户端连接到了集群中的不同服务器,相关的状态信息也可以被检索和同步。

  5. gRPC或REST API:Netty服务器可以通过gRPC或REST API与其他服务器通信。当需要将消息发送到另一个服务器时,可以通过API调用来完成。

  6. 自定义分布式通信协议:在某些情况下,可能需要实现一个自定义的分布式通信协议,用于在服务器之间同步状态和消息。

在所有这些情况下,关键是要有一个可靠的消息传递机制,确保消息能够从一个服务器传递到另一个服务器,并最终传递到正确的客户端。这通常涉及到消息的序列化和反序列化,以及网络传输。此外,还需要处理消息的顺序、重试逻辑、错误处理和可能的消息重复问题。

回答:以上 ,基本是想要是直接在服务器之间同步需要自定义通信协议等。看情况吧。我目前使用的是分布式缓存记录住用户信息,然后使用mq进行不同服务之间推送。

结尾

有问题欢迎讨论,有不足的地方指正。chatgpt说的也不一定对,提供一个参考,欢迎讨论。
请添加图片描述

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Linux 上搭建 Java 环境

目录 一、安装jdk 1. 挑选 jdk 版本 2. 安装 3. 验证 jdk 二、安装tomcat 1. 下载压缩包 2. 上传压缩包给 Linux (需要用到 rz 命令) 3. 解压压缩包(需要用到 unzip) 4. 进入 bin 目录 5. 给启动脚本增加可执行权限 6. 启…

k8s学习(RKE+k8s+rancher2.x)成长系列之概念介绍(一)

一、前言 本文使用国内大多数中小型企业使用的RKE搭建K8s并拉起高可用Rancher2.x的搭建方式,以相关技术概念为起点,实际环境搭建,程序部署为终点,从0到1的实操演示的学习方式,一步一步,保姆级的方式学习k8…

加载服务端发送的模型文件_unity开发进阶

加载服务端发送的模型文件 前言一、服务端搭建二、unity请求文件三、加载模型结语 前言 之前我们学习制作的都是离线状态下的东西,今天我们学习制作一个小demo。 内容就是我们用unity请求后台,接受后台发送过来的模型,然后将模型加载到场景中…

Mac使用adb调试安卓手机

0x00 背景 最近windows电脑休息,用mac办公比较多,手机用时间长了,不太灵光,准备修理一番。于是要用mac调试下android手机。配置略显麻烦,网上的步骤多参差不齐。估计是入门步骤,大佬们也懒得写的太细。于是…

开发微信小程序,将图片下载到相册的方法,saveImageToPhotosAlbum怎么用

在开发微信小程序的时候,经常能看到小程序里面有下载按钮,如何将小程序中的图片下载到手机相册中那,下面给大家说一下怎么做,代码如何去写。 一、到微信小程序后台开启“用户隐私保护指引” 1.进入小程序后台,侧拉拉到…

Unity动画桢事件

1,使用原因 在新项目内部审核的时候,说什么动画节奏不匹配,所以决定用动画桢事件来处理技能释放。当释放技能的时候,先播放技能动画,然后再动画桢所在的时间戳执行技能的逻辑。 2,具体实现 1,…

单调性的应用

1单调性 应用场景&#xff1a;常应用于双指针的进一步优化问题中含义&#xff1a;针对指针 i 1 > i i1>i i1>i一定有 j 1 > j j1>j j1>j或者 j 1 < j j1<j j1<j这样我们就可以利用该性质对算法进行进一步优化&#xff0c;避免一些不必要的遍历…

Linux下安装MySQL5.7的客户端

目录 1、简介 2、将软件上传到指定的位置 3、安装 3.1、centos7中是有自带MySQL数据库的&#xff0c;我们首先得先卸载它 3.2、安装 mysql-community-common-8.0.33-1.el9.x86_64.rpm 3.3、安装mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm 3.4、安装 mysq…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档&#xff1a;http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深&#xff0c;具体而言&#xff0c;就是观察两个协议实体之间交换的报文序列&…

【通过docker安装常用软件镜像】1.镜像 2.安装 redis,jdk,nginx

1)官网镜像网站 hello-world - Official Image | Docker Hub 2)安装镜像测试例子 Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis …

CSS 实现 flex布局最后一行左对齐的方案「多场景、多方案」

目录 前言解决方案场景一、子项宽度固定&#xff0c;每一行列数固定方法一&#xff1a;模拟两端对齐方法二&#xff1a;根据元素个数最后一个元素动态margin 场景二、子项的宽度不确定方法一&#xff1a;直接设置最后一项 margin-right:auto方法二&#xff1a;使用:after(伪元素…

Linux常见的管理命令

1. whoami 作用&#xff1a; 显示出当前有效的用户名称&#xff0c;Linux是多用户多任务 语法&#xff1a;whoami(选项) 选项&#xff1a; --help&#xff1a;在线帮助 --version&#xff1a;显示版本信息和退出 场景使用&#xff1a; 1. 当用户想要查看当前登录系统的用户…

EHS管理系统为何需要物联网的加持?

EHS是Environment、Health、Safety的缩写&#xff0c;是从欧美企业引进的管理体系&#xff0c;在国外也被称为HSE。EHS是指健康、安全与环境一体化的管理。 而在国内&#xff0c;整个EHS市场一共被分成三类&#xff1b; 一类是EHS管培体系&#xff0c;由专门的EHS机构去为公司…

Dlearning

Deep Learning Basic 神经网络&#xff1a; #mermaid-svg-rR22a8Udy5SxGOoP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rR22a8Udy5SxGOoP .error-icon{fill:#552222;}#mermaid-svg-rR22a8Udy5SxGOoP .error-t…

2016年认证杯SPSSPRO杯数学建模B题(第一阶段)低分辨率下看世界全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 低分辨率下看世界 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#xff0c…

Make.com的发送邮件功能已经登峰造极

make.com的发送邮件功能已经做到了登峰造极。 我给你个任务&#xff0c;让你发送个新邮件给谁谁&#xff0c;你一定想到SMTP服务器不就行了。 我给你第二个任务&#xff0c;我让你自动回复一个邮件&#xff0c;注意是回复。 做不到了吧&#xff5e;&#xff5e;&#xff01;…

【C++干货铺】常用的特殊类——饿汉模式和懒汉模式

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 请设计一个类&#xff0c;不能被拷贝 请设计一个类&#xff0c;只能在堆上创建对象 请设计一个类&#xff0c;只能在栈上创建对象 请设计一个类&#xff0c;不…

HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

自定义弹窗&#xff08;CustomDialog&#xff09;可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。 在应用的使用和开发中&#xff0c;弹窗是一个很常见的场景&#xff0c;自定义弹窗…

【Leetcode】2859. 计算 K 置位下标对应元素的和

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之和 &#xff0c;这些特定元素满足&#xff1a;其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的…

腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…