【知识拓展】HTTP、WebSocket 和 RPC:区别与使用场景详解
在工作中,HTTP、WebSocket 和 RPC 是三种常见的协议或通信方式,根据资料查阅,本文主要记录它们的区别及其适用的使用场景
HTTP(超文本传输协议)
概述
HTTP(Hypertext Transfer Protocol)是一种用于分布式、协作、超媒体信息系统的应用层协议。它是万维网(WWW)的基础,通过它,客户端(通常是浏览器)和服务器之间可以进行通信。
特性
- 无状态:每个请求都是独立的,服务器不会保留任何会话信息。
- 请求-响应模式:客户端发起请求,服务器返回响应。
- 文本协议:数据以纯文本形式传输,包括头部和主体。
- 标准端口:默认使用端口80(HTTP)和443(HTTPS)。
使用场景
- 网页浏览:用户通过浏览器请求网页资源(HTML、CSS、JavaScript、图片等),服务器响应这些资源。
- API调用:客户端通过HTTP请求与服务器交互数据(例如RESTful API)。
- 文件下载:用户通过HTTP下载文件,如软件、文档等。
WebSocket协议
概述
WebSocket是一种在单个TCP连接上进行全双工通信的协议。它由HTML5引入,旨在解决HTTP的实时性和效率问题。
特性
- 全双工通信:允许客户端和服务器同时发送和接收消息。
- 持久连接:连接一旦建立,将保持打开状态,直到显式关闭。
- 低开销:较少的头部信息,使得数据传输效率更高。
- 实时性:非常适合需要低延迟和实时更新的应用。
使用场景
- 实时聊天应用:如即时通讯工具(微信、WhatsApp)。
- 在线游戏:需要低延迟和实时交互的多人在线游戏。
- 实时数据推送:如股票行情、体育比分更新。
- 协作编辑工具:如Google Docs,多个用户同时编辑文档时的实时同步。
RPC(远程过程调用)
概述
RPC(Remote Procedure Call)是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
RPC的核心并不在于使用什么协议。目的是让你在本地调用远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。
通过RPC能解耦服务,这才是使用RPC的真正目的。RPC的原理主要用到了动态代理模式,至于http协议,只是传输协议而已。简单的实现可以参考spring remoting,复杂的实现可以参考dubbo。
特性
- 透明性:调用远程服务的方式与本地调用几乎无异,隐藏了底层通信细节。
- 协议无关:可以基于多种协议实现(如HTTP、TCP、UDP)。
- 同步/异步:可以支持同步调用和异步调用。
- 数据序列化:通常使用JSON、XML或二进制格式进行数据编码和解码。
使用场景
- 分布式系统:如微服务架构中不同服务之间的通信。
- 跨语言调用:不同编程语言编写的服务之间进行通信。
- 高性能服务:需要高效、低延迟的远程服务调用,如金融系统的交易处理。
详细比较
| 特性 | HTTP | WebSocket | RPC | 
|---|---|---|---|
| 通信模式 | 请求-响应 | 全双工通信 | 请求-响应(可以是同步或异步) | 
| 连接管理 | 每次请求建立新连接(HTTP/1.1支持持久连接) | 持久连接 | 持久连接(取决于底层协议) | 
| 数据传输 | 文本或二进制 | 文本或二进制 | 序列化后的数据(JSON、XML、二进制) | 
| 实时性 | 较差 | 优秀 | 良好 | 
| 使用场景 | 网页浏览、API调用、文件下载 | 实时聊天、在线游戏、数据推送 | 分布式系统、跨语言调用、高性能服务 | 
使用场景详解
HTTP 使用场景
HTTP协议是互联网的基石,主要用于浏览器与服务器之间的通信。典型的使用场景包括:
- 网页浏览:用户通过浏览器访问网页,浏览器向服务器发送HTTP请求,服务器返回HTML、CSS、JS等资源。
- RESTful API:在前后端分离的架构中,前端通过HTTP请求与后端API服务器进行数据交互。
- 文件下载:用户通过HTTP协议下载各种类型的文件,如文档、图片、软件等。
WebSocket 使用场景
WebSocket协议适用于需要实时数据传输的应用场景。典型的使用场景包括:
- 即时通讯:如聊天应用和社交媒体消息系统,要求低延迟和实时消息传输。
- 实时更新:如股票市场行情、体育比分更新,需要实时推送数据给用户。
- 在线协作:如多人同时编辑文档、代码,实时同步用户操作。
- 在线游戏:需要低延迟的实时交互游戏,如多人在线竞技游戏。
RPC 使用场景
RPC协议用于分布式系统中远程服务调用。典型的使用场景包括:
- 微服务架构:在微服务架构中,各个服务之间需要通过RPC进行通信和数据交互。
- 跨语言调用:不同语言编写的服务之间可以通过RPC进行通信,如Java服务调用Python服务。
- 高性能计算:在需要高效、低延迟的系统中,RPC用于远程函数调用,如金融交易系统中的交易处理。
一些问题
什么是RPC框架,有哪些好处?
可以理解为RPC框架是一种软件框架或者库,用于简化在不同计算机或者进程之间进行远程调用的过程。
如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了:首先就是长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销等。
1. 性能
- HTTP:HTTP请求每次都需要建立连接(除非使用HTTP/1.1的持久连接),并且每次请求和响应都包含较多的头部信息。这些都会带来额外的开销,影响性能。
- RPC:通常使用长连接,减少了连接建立的开销。RPC可以基于更高效的传输协议(如TCP或gRPC),从而降低延迟和提高传输效率。
2. 数据格式
- HTTP:常使用文本格式(如JSON、XML)进行数据传输,解析这些格式需要额外的计算资源,尤其是在高频通信时。
- RPC:可以使用二进制格式进行数据传输(如Protocol Buffers),这不仅节省带宽,还减少了序列化和反序列化的开销。
3. 透明性和易用性
- HTTP:需要开发者手动构建请求和处理响应,这在复杂系统中会增加代码量和维护成本。
- RPC:通过抽象远程调用过程,使得调用远程服务就像调用本地函数一样,隐藏了底层通信细节,提高了代码的可读性和维护性。
4. 功能和特性
- HTTP:主要用于无状态的请求-响应模式,缺乏一些高级特性(如负载均衡、重试机制)。
- RPC:许多RPC框架(如gRPC)内置了丰富的功能,包括负载均衡、重试、超时控制、流式传输等,这些功能对于构建可靠的微服务系统非常重要。
5. 协议和扩展性
- HTTP:是一个通用的应用层协议,虽然可以用于微服务通信,但它的通用性也意味着它可能不够专门化,无法提供某些特定的优化。
- RPC:专为服务间通信设计,可以提供更专门化的优化和扩展,适合高性能、低延迟的服务间通信。
相关文章:
【知识拓展】HTTP、WebSocket 和 RPC:区别与使用场景详解
在工作中,HTTP、WebSocket 和 RPC 是三种常见的协议或通信方式,根据资料查阅,本文主要记录它们的区别及其适用的使用场景 HTTP(超文本传输协议) 概述 HTTP(Hypertext Transfer Protocol)是一…...
C语言printf( ) 函数和 scanf( ) 函数格式符的修饰符 “*”有什么作⽤?
一、问题 在 printf( ) 函数和 scanf( ) 函数的格式修饰符有很多,以浮点型数据为例,有%f、%lf、 %3.0f、%.4f等。不同的修饰符表示不同的含义,那么修饰符“*”有什么含义呢? 二、解答 下⾯通过例⼦来证明⼀下这个格式符在 printf…...
java 使用WebClient发送https请求
核心逻辑 绕过ssl证书检查 具体操作 话不多说上代码 // 构建WebClient public static WebClient createWebClient() throws SSLException {SslContext context SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();HttpClient htt…...
Python 中的内存管理机制
Python 的内存管理机制主要由两个部分组成:垃圾回收机制和引用计数。 垃圾回收机制主要负责检测和回收不再被使用的内存。Python 使用的是自动垃圾回收机制,也就是说程序员不需要手动释放内存。Python 的垃圾回收机制采用了引用计数的方法来追踪和回收不…...
Mac电脑重置网络命令
在Mac电脑上重置网络设置可以通过终端命令来实现。以下是几种方法,包括刷新DNS缓存、重置网络接口,以及重置Wi-Fi设置。 刷新DNS缓存 要刷新DNS缓存,可以使用以下命令: sudo dscacheutil -flushcache; sudo killall -HUP mDNSR…...
 
C++期末复习总结(2)
目录 1.运算符重载 2.四种运算符重载 (1)关系运算符的重载 (2) 左移运算符的重载 (3)下标运算符的重载 (4)赋值运算符的重载 3.继承的方式 4.继承的对象模型 5.基类的构造 6…...
 
[word] word大括号怎么打两行 #其他#其他#微信
word大括号怎么打两行 Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。 一直以来,Microsoft Office Word 都是最流行的文字处理程序。 作为 Office 套件的核心程序, Word 提供了许多易…...
 
【python】python指南(二):命令行参数解析器ArgumentParser
一、引言 对于算法工程师来说,语言从来都不是关键,关键是快速学习以及解决问题的能力。大学的时候参加ACM/ICPC一直使用的是C语言,实习的时候做一个算法策略后台用的是php,毕业后做策略算法开发,因为要用spark&#x…...
 
香橙派 Orange AIpro 测评记录视频硬件解码
香橙派 Orange AIpro 测评记录视频硬件解码 香橙派官网:http://www.orangepi.cn/ 收到了一块Orange Pi AIpro开发板,记录一下我的测评~测评简介如下:1.连接网络2.安装流媒体进行硬件解码测试3.安装IO测试 简介 Orange Pi AI Pro 是香橙派联合…...
 
四天工作制,比你想象的更近了一点
原文:Andrew Keshner - 2024.05.30 软件公司、大型企业甚至警察部门都在试验这一看似遥不可及的概念。 教育软件公司 Kuali 的会议精简,除非绝对必要,员工尽量避免安排会议。即使有会议,也鼓励员工跳过与自己工作无关的部分。在…...
 
(UE4.26)UE4的FArchive序列化入门
前言 序列化(Serialize)和反序列化(UnSerialize)是程序领域常见的概念。对于这两个词汇我理解的是 序列化(Serialize): 变量值(int, float, string等基本类型, 或者Array,Map,或者更复杂的复合体)存储为一个文件(二进制流, 二进制文件, json, xml等格式…...
 
Inpaint9.1软件下载附加详细安装教程
软件简介: Inpaint 是个人开发者Max开发的图片处理软件,可以高效去除水印,修复照片等。使用方法和操作都很简单,非常适合不会PS等软件的小白用户。 安 装 包 获 取 地 址: Iinpaint win版:https://souurl.cn/b…...
 
Unity 集成 FMOD 音频管理插件 2.02
Unity 集成 FMOD 音频管理插件 2.02 3. 集成教程:3.1 设置Unity项目3.2 设置FMOD项目3.3 设置 FMOD for Unity3.4 添加声音:卡丁车引擎3.5 添加声音:氛围3.6 添加声音:音乐3.7 删除现有音频3.8 下一步 10. 脚本 API 参考10.1 基础…...
 
Linux下线程的互斥与同步详解
🤖个人主页:晚风相伴-CSDN博客 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 🙏如果内容有误或者有写的不好的地方的话&…...
 
【栈】736. Lisp 语法解析
本文涉及知识点 栈 LeetCode736. Lisp 语法解析 给你一个类似 Lisp 语句的字符串表达式 expression,求出其计算结果。 表达式语法如下所示: 表达式可以为整数,let 表达式,add 表达式,mult 表达式,或赋值的变量。表达…...
 
什么时候用C而不用C++?
做接口只用C,千万别要C。C是编译器敏感的,一旦导出的接口里有 std::string这些东西,以及类,注定了要为各个编译器的各个版本准备独立的库。 刚好我有一些资料,是我根据网友给的问题精心整理了一份「C的资料从专业入门…...
unix环境编程编程扫描版:深度解析与实践指南
unix环境编程编程扫描版:深度解析与实践指南 在探索Unix环境编程的广阔天地时,我们如同行走在一条充满未知与奇遇的旅程中。本篇文章将从四个方面、五个方面、六个方面和七个方面,深入剖析Unix环境编程的精髓,帮助读者在编程的海…...
 
2024年6月8日 每周新增游戏
中医百科中药: 中医百科中药是一款非常强大的中药知识科普软件,该应用提供500多味中草药的文献资料,强大的搜索功能可根据功效、特点和关键词来快速查找中药,而且每味中药的图片、功效、主治、炮制方法等百科知识,可以很好的帮助你…...
AI提示词Prompts有没有好公式?( 计育韬老师高校公益巡讲答疑实录2024)
这是计育韬老师第 8 次开展面向全国高校的新媒体技术公益巡讲活动了。而在每场讲座尾声,互动答疑环节往往反映了高校师生当前最普遍的运营困境,特此计老师在现场即兴答疑之外,会尽量选择有较高价值的提问进行文字答疑梳理。 *本轮巡讲主题除了…...
 
一个 buffer 使用的负反馈实例
端到端拥塞控制其实就是负反馈的实施。典型的做法是识别到一系列标志性事件,比如丢包,时延增加等,然后对这些事件做反应,进而形成负反馈,但 inflight 守恒是一种完全不同的做法,它将负反馈平铺到了整个传输…...
 
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
 
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
 
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
 
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
