当前位置: 首页 > news >正文

http,socket,WebSocket,RPC之间的联系和区别

首先,我们通过一张图来展示TCP,UDP,socket之间的关系(图来自B站 小白debug)

d1c4a350f444318ee038ae87f4223880

socket是传输层和应用层之间的软件抽象层,他是一组接口,在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。通过socket,用户(即开发者)不需要直接处理 TCP 层或更低层级(如 IP 层、数据链路层等)的数据通信细节和实现逻辑。Socket 提供了一个抽象层,使得开发者能够更专注于应用层的逻辑设计,而将底层网络通信的具体实现细节交给操作系统和相关的网络协议栈来管理。

客户端和服务端建立socket的过程
e2a264029afef33a5471520dca87ee0a

WebSocket于HTTP之间的联系

首先,两者传输层都是基于TCP实现,TCP是一个双工通信,但是HTTP却是一个半双工通信,相当于TCP协议被切掉了一半,当然这是因为HTTP本身设计之初就是用来进行查看网页文本,没必要进行双向信息传输;那么现在在需要进行双向通信的时候,就需要使用WebSocket协议了
在使用WebSocket协议的过程中,WebSocket首先通过http向服务器发送一个特殊的upgrade请求到服务器,请求将现有的http连接升级为websocket连接,当连接成功以后,http协议就被转换成为了WebSocket,之后的通信不再基于http协议,而是直接基于TCP进行,使用WebSocket自己的帧格式进行数据交换

HTTP协议和RPC之间的关联和差异

经常会有人问既然有了HTTP为什么还需要RPC,但是实际上应该反过来问,为什么有了RPC还要有HTTP,因为RPC产生于80年代,HTTP产生于90年代,说白了两者都是用来进行网络服务通信,但是在目的上有些许不同,并且RPC是针对于特定的语言或者框架而设计的,并不如HTTP那样具有广泛的兼容性和可移植性
HTTP 是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网的数据通信基础,主要用于Web浏览器与网站服务器之间的通信。
RPC(远程过程调用)是一种通过网络从远程计算机程序上请求服务的技术,而不需要了解底层网络技术的协议。它允许一个程序调用位于网络另一端的另一个地址空间中的过程或函数,就像调用本地函数一样简单。

功能差异:HTTP 主要用于客户端与服务器之间的文档交换和服务调用,特别是 Web 应用;而 RPC 更侧重于提供一种机制让不同机器上的应用程序能够像调用本地方法一样调用对方的方法,适用于构建分布式系统。
使用场景:对于需要快速、频繁地进行小数据量交互的应用,RPC 可能更合适;而对于需要传递复杂文档或多媒体内容的应用,HTTP 则更为适用。

http://www.sczhlp.com/news/4804/

相关文章:

  • 3.3 for循环
  • C++ 中 inline 与内联优化
  • 安卓加固脱壳
  • [EC Final 2022] Binary String 题解
  • 清橙基础练习之课程15
  • go学习笔记:log.Fatal的含义和作用是什么?
  • C++高性能:优化代码运行效率的艺术1 C++简介
  • 清橙基础练习之动态规划5
  • 2025.8.3总结 - A
  • Kubernetes v1.33:原地调整 Pod 资源特性升级为 Beta
  • 六爻01
  • Trail of Bits深度参与CSAW网络安全竞赛:五项CTF挑战详解
  • 第二十篇
  • Python入门学习(八)JSON、反序列化、序列化
  • 2025/8/2 总结
  • 7月30日随笔 - 20243867孙堃2405
  • VS Code中如何关闭Github Copilot - 指南
  • 记一次酣畅淋漓的js逆向
  • 7月29日随笔 - 20243867孙堃2405
  • MongoDB指定分片键
  • NSA稀疏注意力深度解析:DeepSeek如何将Transformer复杂度从O(N)降至线性,实现9倍训练加速
  • mc日记
  • flash-attn在消费级显卡上安装环境出现卡住系统的问题/无法安装
  • GraphRAG
  • [python]基于动态实例的命令处理设计
  • 培训时有些人人不会的东西
  • 深入解析:高效轻量的C++ HTTP服务:cpp-httplib使用指南
  • 28天
  • AI给老码农的小小震撼:PB/PE分位计算
  • VS2015+ Qt5.9.1 内嵌CEF 环境配置