聊聊客户端/服务器与订阅/发布两大模型

news2024/9/23 1:19:47

f66f27aec6a5a2df0adaf539f43134e5.gif

正文

大家好,我是bug菌~

在项目开发中根据不同的应用场景通常会去尝试各种各样的通信方式,可能试来试去可能又回到了原地,而对于一个相对比较大的网络系统,不同的场景得考量不同的通信架构模型,那么今天就跟大家聊聊两个主流的网络架构模型:C/S模型与订阅发布模型

1

C/S模型

大家在学习计算机网络的时候,基本上都会接触到客户端-服务器(Client-Server,C/S)模型,在我们平时的生活中也是经常说服务器异常等等其实都是说的客户端与服务器架构,这种网络架构主要就是两种角色:客户端和服务器。

客户端(client)可以是应用程序也可以计算机,它主要是向服务器发起请求(该请求通常是某项服务或者资源),客户同时会接收并处理服务器的响应。

客户端通常用于用户交互,处理用户输入,并且把服务器的响应处理显示数据。它可以是桌面应用程序、移动应用程序或Web浏览器,Chatgpt这样的AI等等。

服务器(server)是为客户端提供服务或资源的计算机或程序。它接收客户端的请求,处理这些请求,并将结果返回给客户端。

服务器通常具备处理请求、存储数据和提供服务的能力。它可以是Web服务器、数据库服务器、邮件服务器等。

2

订阅与发布模型

大订阅与发布模型(Publish-Subscribe Model)是一种消息传递和事件处理的架构模式,最典型的就是目前主流的MQTT了。

该模型主要用于在分布式系统中实现消息的分发和接收。这种模型使得系统的组件可以松耦合地进行通信,通常被广泛应用于消息队列、事件驱动架构、通知服务等场景。通常该模型有如下四部分组成:

发布者(Publisher)

发布者是消息的发送者或生产者。它创建并发送消息到一个或多个主题(Topic),而不关心消息会被哪些订阅者接收。发布者将消息发布到指定的主题中,任务完成后不再处理该消息的分发。

订阅者(Subscriber)

订阅者是消息的接收者或消费者。它向系统注册感兴趣的主题,以便接收相关的消息。订阅者对一个或多个主题进行订阅,从而接收到这些主题中发布的所有消息。

主题(Topic)

主题是一个逻辑上的消息分类标准,消息发布时会指定一个主题,订阅者根据主题来筛选和接收消息。主题作为消息的分类标识,帮助系统将消息分发给正确的订阅者。

消息代理(Message Broker)

消息代理是处理消息传递的中间件,负责接收、存储、分发消息。消息代理充当发布者和订阅者之间的中介,处理消息的路由和传递。

可以看出来这种模型相对C/S模型要灵活更多。

3

两大模型对比

前面大致介绍了两大模型的基本组成,那么这里我们聊聊看两个模型的区别,以及在实际项目中如何去选择。

C/S模型是一种请求响应机制,应对比较频繁的数据交互的需求会采用一种长时间的持续连接,当然了也有一些临时的连接形式主要用于处理一些请求和响应周期较短的应用。

如果客户端需要不断地请求服务器且还需等待服务器响应,那网络带宽的消耗非常之高。而发布/订阅模式允许设备仅在需要时传递数据,而不是不断地轮询,这减少了频繁的网络请求和带宽消耗。

C/S模式相对订阅发布模式角色管理上更加的集中,资源共享能力会更强,服务器的安全等级越高,整个系统也会相应的更加稳定安全。

而订阅与发布模式通过了主题和代理进行了解耦,增减角色对系统核心结构不会发生很大变化,其扩展性会好很多。当然也因为订阅与发布模式增加了代理,所以相对C/S这种点对点的模式延时会增加。

4

两大模型的应用选择

所以谈了这么多,客户端与服务器模型主要适用于需要直接、同步通信的场景,如:

  1. 网页浏览:客户端请求网页内容,服务器返回页面数据。
  2. 在线交易系统:客户端发起交易请求,服务器处理并返回结果。

而发布订阅模型适用于需要解耦和异步通信的场景,如:

  1. 消息通知系统:应用向用户发布通知,用户通过订阅接收。
  2. 物联网监控:设备发布传感器数据,其他设备或系统订阅这些数据进行处理。

大家在以后的系统设计中根据实际项目需求合理的选择相应的模型,往往一个合适的模型会给后续的开发带来极大的便利。

最后

      好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

唯一、永久、免费分享嵌入式技术知识平台~

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 ce0af126b5471022c58ed14a3ac1ef0a.gif

☞  嵌入式C语言进阶专辑 67816a298e125febda02484ec1428c16.gif

☞  “bug说”专辑 573d1f79f1e407e56f4946686a4fa672.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

0ded34e189319ca452f920f4a77ff4b9.gif

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

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

相关文章

面向对象23种设计模式通俗理解

终点即是起点,自强不息! 设计模式的理解 设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 模式:在某些场景下,针对某类问题的某种通用的解决方案。 场景:项目所在的环境 问题:约束条件,项目目标…

慷智serdes调试记录(AIM951-958)

项目使用的是AIM951~958 951和958测试图谱输出 下面是两种1920*1080不同屏幕timing的951图谱输出(一般我们提供屏幕timing,然后找慷智FAE要下寄存器配置,他有一个xcel文档,可以自己设置屏幕timing然后得到寄存器设置值&#xff…

Vue 3 Composition API 中如何正确添加表单项副本到数组

在 Vue 3 中,使用 Composition API 时,如果你尝试直接通过引用(如 formState)来填充 formList 数组,你会遇到一个问题:所有通过 addForm 方法添加的表单项实际上都是对 formState 的同一个引用。这意呀着&a…

K3 给K+增加日志(获取机器名和IP地址)

K3有个外挂系统是K,可以对数据进行修改,但是没有日志功能,谁修改了什么、什么时候修改的不知道,借鉴t_log做一个日志 1、先建一个日志表 CREATE TABLE [dbo].[kplus_log]([FlogID] [int] IDENTITY(1,1) NOT NULL,[FDate] [datet…

CST软件如何计算天线fidelity保真度?达索代理思茂信息

天线保真度(fidelity)是指辐射信号和输入信号的相似程度,用最大归一化值表示[-1,1]。单独天线的保真度用端口激励信号和空间探针接收信号计算;双天线的保真度可用接收天线端口信号和发射天线的激励信号计算。所以在一定…

基于深度学习的谣言监测系统-毕业设计

介绍 本项目是一款基于深度学习的谣言监测系统,利用 LSTM 模型实现对网络谣言的自动识别和监测。在互联网和社交媒体高速发展的背景下,本项目的推出具有重要意义,旨在提高谣言识别的准确性和效率,帮助公众快速辨别真伪信息&#…

Java中类的成员介绍

我的后端学习大纲 我的Java学习大纲 4.类的成员: 3.1.类的成员 -> 属性介绍(成员变量): a.语法格式: 1.修饰符 数据类型 属性名 初始化值 ;2.说明1: 修饰符 常用的权限修饰符有:private、缺省、prot…

自动驾驶TPM技术杂谈 ———— 多目标跟踪

文章目录 介绍目标外观模型目标形状模型目标特征描述颜色特征梯度信息纹理特征光流特征边缘特征多特征融合 目标运动估计约束型模型描述型模型 目标检测线上检测器线下检测器 数据关联 介绍 目标跟踪技术一直以来都是计算机视觉领域中的一个核心分支。多目标跟着那个又因其技术…

【Linux】进程(第九篇)

目录 1.进程概述 2.进程的内存布局 3.Linux和Windows空间对比 4.进程控制块(PCB) 5.进程的状态 6.进程的状态转换 7.进程源语 8.fork() 1.进程概述 进程是操作系统进行资源分配的最小单位,而内存是进程运行必不可少的资源。那么&…

鱼哥好书分享活动第30期:一本书看完教你学习如何做B端竞品分析?《有效竞品分享》

鱼哥好书分享活动第30期:一本书看完教你学习如何做B端竞品分析?《有效竞品分享》 01 明确目标:案例分享:案例背景: 02 选择竞品:2.1 竞品的分类2.2 如何找到B端的竞品?1.找售前/销售沟通。2.各个…

【自由能系列(中级),代码模拟】预测编码的核心:三个关键方程式的详解

预测编码的核心:三个关键方程式的详解 ——探索预测编码背后的数学原理与应用 核心结论:预测编码是一种基于贝叶斯定理的理论框架,它通过三个关键方程式描述了大脑如何处理和解释来自环境的信号。这些方程式分别建立了贝叶斯定理的简化形式、…

【机器学习】基扩展的基本概念以及其中的多项式回归、样条方法和广义可加模型的简单介绍(含python代码实例)

引言 基扩展是提升模型性能的重要工具,正确选择和应用基扩展方法可以显著提高模型的预测能力和解释性 文章目录 引言一、基扩展1.1 基扩展定义1.2 基扩展方法1.2.1 多项式基扩展1.2.2 样条基扩展1.2.3 径向基函数(RBF)1.2.4 傅里叶基扩展1.2.…

强制结束输入的方法

如果scanf要求输入两个数,现在只输入一个数,想要结束输入该怎么办呢? 此时如果按空格、TAB和Enter键都是无法结束输入的。 之前在“用恋爱脑搞懂scanf的返回值”一文中讲过, Windows的输入结束信号是Ctrl+Z&#xff…

ParallelsDesktop19可在任何Mac上运行Windows软件

ParallelsDesktop19是一款Mac虚拟机软件,可在任何Mac上运行Windows,体验不同操作系统之间的无缝集成,并具有创新设计和增强功能,如无密码登录与TouchID、支持macOSSonoma14和增强打印选项。此外,它还支持运行更多Windo…

day40(8/30)——使用docker部署project-exam-system

一、回顾 1、使用harbao仓库 1. Python -- version 2. yum -y update 3. yum -y install python2-pip 4. pip install --upgrade pip20.3 -i https://mirrors.aliyun.com/pypi/simple 5. pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple 6. sou…

安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景

随着科技的不断进步,增强现实(AR)技术逐渐在多个领域展现出其独特的优势,尤其是在安保和安防方面。AR眼镜凭借其先进的功能,在机场、车站、海关、港口、工厂、园区、消防局和警察局等行业中为安保人员提供了更为高效、…

KinectFusion

1.KinectFusion 笔记来源: 论文地址:KinectFusion: Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera* 项目地址:github/KinectFusion [1] 截断符号距离 | TSDF, Truncated Signed Distance Function 本篇对Kinec…

零跑C11 S01 T03 路特斯EMEYA繁花ELETRE启辰D60EVPLUS维修手册电路图资料更新

经过整理,零跑C11 S01 T03 路特斯EMEYA繁花ELETRE启辰D60EVPLUS已经更新至汽修帮手资料库内,覆盖市面上99%车型,包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传…

tomcat redis minio nginx windows开机自启

tomcat 开机自启 命令 service.bat install 控制台输入 service.bat install 再到服务中去查看有没有注册成功,minio,redis,nginx 也是一样在服务里查看注册成功没 redis 开机自启 命令 redis-server.exe --service-install redis.windows.conf --loglevel ve…

CT转化MR图像的算法及模型解决

将CT(Computed Tomography)图像转化为MR(Magnetic Resonance)图像是一个复杂的图像处理任务,因为CT和MR图像是基于完全不同的物理原理获取的。CT图像主要反映组织的密度差异,而MR图像则反映组织的质子密度、…