RPC是什么?和HTTP区别?

RPC 是什么?HTTP 是什么?

作为一个程序员,假设我们需要从A电脑的进程发送一段数据到B电脑的进程,我们一般会在代码中使用 Socket 进行编程。

在这里插入图片描述

此时,可选性一般就是 TCP 和 UDP 二选一,由于 TCP 可靠、UDP 不可靠,只要对可靠性有要求,一般就选 TCP 了。

Socket 本质是个代码库,我们需要先创建类似于:

在这里插入图片描述

其中 SOCK_STREAM是指使用字节流传输数据。说白了就是 TCP 协议。

在这里插入图片描述

在定义了 socket 之后,我们就可以对这个 socket 进行操作。
比如使用 bind() 方法绑定 IP 端口;
connect() 方法发起建联,里面就包含了常见的 TCP 三次握手流程;
在建立连接之后就可以使用 send() 方法发送数据;
accept() 方法接收数据。

在这里插入图片描述

光这个“纯裸”的 TCP 连接就可以收发数据了,那是不是就够了?

不行。

八股文常背 TCP 有三个特点:面向连接、可靠、基于字节流。

在这里插入图片描述

在这里插入图片描述

这里关注“基于字节流”,字节流可以理解为双向通道里流淌的二进制数据,就是一堆“01”串。“纯裸”的 TCP 连接收发的这些“01”串是没有任何边界的,你无法知道一条完整消息的起始位置。

### SOFARPC 与 Dubbo 的核心差异及适用场景 #### 1. 设计理念 SOFARPC 是蚂蚁集团自研的高性能 RPC 框架,其设计初衷是为了满足蚂蚁内部大规模微服务架构的需求,因此在功能丰富度服务稳定性上表现优异[^3]。Dubbo 则是一个更通用的开源 RPC 框架,最初由阿里巴巴开源,经过社区的广泛使用改进,已经成为国内最流行的 RPC 框架之一。 #### 2. 核心特性对比 | 特性 | SOFARPC | Dubbo | |--------------------|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------| | **性能优化** | SOFARPC 在高并发场景下表现出色,内置了线程模型优化网络通信优化[^4]。 | Dubbo 提供了多种序列化协议(如 Hessian、Protobuf)以满足不同的性能需求。 | | **扩展性** | SOFARPC 提供了丰富的插件机制,支持动态扩展功能。 | Dubbo 支持 SPI 机制,允许用户通过扩展点定制化功能。 | | **服务治理** | SOFARPC 集成了蚂蚁集团的服务治理能力,包括限流、降级、熔断等功能。 | Dubbo 也提供了类似的功能,但需要依赖第三方组件(如 Sentinel)来实现完整的治理能力。 | | **协议支持** | SOFARPC 默认支持 Bolts 协议,并兼容其他常见协议[^4]。 | Dubbo 主要基于 Dubbo 协议,同时也支持多种协议扩展。 | | **社区活跃度** | SOFARPC 的社区相对较小,主要由蚂蚁集团维护推动。 | Dubbo 拥有庞大的社区支持,开发者可以更容易地获取帮助资源。 | | **未来发展方向** | SOFARPC 正在探索与 Service Mesh 的结合,进一步提升微服务架构的灵活性[^3]。 | Dubbo 3.0 计划引入 Service Mesh 支持,同时保持对传统架构的兼容性[^2]。 | #### 3. 适用场景 - **SOFARPC** 更适合于企业内部已经采用蚂蚁技术栈的场景,尤其是需要高度定制化服务治理能力的大型微服务系统。 - **Dubbo** 则更适合于开源生态中,需要快速搭建分布式系统的场景。由于其广泛的社区支持灵活的扩展机制,Dubbo 成为许多中小型企业首选的 RPC 框架。 #### 4. 示例代码 以下是一个简单的 SOFARPC Dubbo 服务定义示例: ##### SOFARPC 示例 ```java import com.alipay.sofa.rpc.api.SofaService; @SofaService(uniqueId = "helloService") public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` ##### Dubbo 示例 ```java import org.apache.dubbo.config.annotation.Service; @Service(version = "1.0.0") public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值