分布式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.mzph.cn/news/640926.shtml

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

相关文章

FPGA中跨时钟域传数据——(1)单bit脉冲

FPGA中跨时钟域传数据——(1)单bit脉冲 亚稳态模型由快时钟传到慢时钟由慢时钟传到快时钟 亚稳态模型 必须在建立时间和保持时间内,数据不变化,否则会产生亚稳态。 由快时钟传到慢时钟 在快时钟里面进行数据展宽(…

牛客周赛 Round 20 解题报告 | 珂学家 | 状压DP/矩阵幂优化 + 前缀和的前缀和

前言 整体评价 这场比赛很特别,是牛客周赛的第20场,后两题难度直线飙升了。 前四题相对简单,E题是道状压题,历来状压题都难,F题压轴难题了,感觉学到了不少。 A. 赝品 先求的最大值 然后统计非最大值的个…

位置无关码PIC详解:原理、动态链接库、代码重定位

静态链接库将代码和数据在编译时整合到可执行文件,使程序独立运行。动态链接库允许在程序运行时加载,而不是在编译时将库的代码和数据静态地合并到可执行文件中。这允许多个程序共享同一份库,减小程序体积。由于动态链接库在编译时并未确定其…

【Electron】Electron是什么

1. Electron是什么 Electron是使用JavaScript、HTML和CSS构建跨平台(Windows、MacOs、Linux)的桌面应用。Electron其实就是一个可以展示网页内容的壳子,相当于一个独立的浏览器,可以提供给你一些接口,去调用系统的资源…

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能

微软 Power Apps model drven app 模型驱动应用使用Plugin插件实现业务流程跳转阶段功能 模型驱动应用使用插件实现跳转业务流程阶段跳转功能 在实际操作中总会遇到使用业务流程的需求,那么如何使用plugin实现跳转阶段的功能呢 需求背景是主表上有业务流程&#x…

在Python环境中运行R语言的配环境实用教程

前情提要 在做一些生物信息与医学统计的工作,本来偷懒希望只靠python完成的,结果还是需要用R语言,倒腾了一会儿,调成功了,就记录一下这个过程。 我的环境: win10, pycharm, R-4.3.2 首先,我们…

Redis 面试题 | 05.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

muduo网络库剖析——线程Thread类

muduo网络库剖析——线程Thread类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精…

OpenCV书签 #差值哈希算法的原理与相似图片搜索实验

1. 介绍 差值哈希算法(Difference Hash Algorithm,简称dHash) 是哈希算法的一种,主要可以用来做以图搜索/相似图片的搜索工作。 2. 原理 差值哈希算法通过计算相邻像素的差异来生成哈希,即通过缩小图像的每个像素与平…

高效构建Java应用:Maven的使用总结

一、Maven简介和快速入门 1.1 Maven介绍 Maven-Introduction Maven 是一款为 Java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 总结:Maven…

excel(wps)之vlookup函数合并sheet数据

VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询列序所对应…

DEB方式安装elastic search7以及使用

参考:https://www.cnblogs.com/anech/p/15957607.html 1、安装elastic search7 #手动下载安装 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.1-amd64.deb wget https://artifacts.elastic.co/downloads/elasticsearch/elastics…

深度学习(4)--Keras安装

目录 Keras安装: 1.1.安装CUDA/cuDDN工具包 1.1.1.安装前准备 1.1.2.安装CUDA 1.1.3.安装cuDDN 1.2.安装Anaconda 1.3.安装tensorflow框架 1.3.1.使用cmd安装 1.3.2.使用Anaconda Prompt安装 1.4.安装Keras框架 1.5.打开jupyter notebook,执行import调用 Keras…

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择器 点击button按钮触发事件显示月份与获取的时间 Button button3 (Button) findComponentById(ResourceTable.Id_button3);button3.setClickedListener(new Component.ClickedListener() {Overridepublic void onClick(Compon…

基于springboot酒店预订系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:AdminLTEjQueryvue.jselementuijsp 服务端技术:springbootmybatis 本系统功能包括: 一、…

实验:MySQL 客户端SocketTimeout 抓包分析

实验准备 服务端环境准备 服务器信息 阿里云 99 大洋白嫖机 $ cat /proc/version Linux version 5.15.0-83-generic (builddlcy02-amd64-027) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #92-Ubuntu SMP Mon Aug 14 09:30:42 UT…

特斯拉FSD的神经网络(Tesla 2022 AI Day)

这是特斯拉的全自动驾驶(Full Self Driver)技术结构图,图中把自动驾驶模型拆分出分成了几个依赖的模块: 技术底座:自动标注技术处理大量数据,仿真技术创造图片数据,大数据引擎进不断地更新&…

UML中的实现关系

在UML(统一建模语言)中,“实现”关系是指一个类(实现类)实现一个接口或抽象类的方法的情况。这种关系通常用于指定类如何实现某个特定的接口规范。 UML中的实现关系 在UML类图中,实现关系用一条带有空心箭…

win10 任务栏设置透明

先看效果图 第一步:按下“Win R”组合键,输入“regedit”并回车,打开注册表编辑器。 第二步:在注册表中找到路径“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced”。 第三步:在…

机器人3D视觉引导半导体塑封上下料

半导体塑封上下料是封装工艺中的重要环节,直接影响到产品的质量和性能。而3D视觉引导技术的引入,使得这一过程更加高效、精准。它不仅提升了生产效率,减少了人工操作的误差,还为半导体封装技术的智能化升级奠定了坚实的基础。 传统…