在Go语言中,net/http 和 net/rpc 是两个不同的包,它们分别用于实现不同的网络通信模式:

net/http:

  net/http 包主要用于构建Web服务和客户端,它实现了HTTP协议,这是互联网上最广泛使用的应用层协议之一,主要用于传输超文本(HTML)和其他资源。

  HTTP 协议是基于请求-响应模型的,客户端发起HTTP请求,服务器响应HTTP响应。请求包括方法(如GET、POST等)、URL、头部和可选的正文,响应包括状态码、头部和正文。

  使用 net/http,你可以轻松地创建处理HTTP路由、中间件、静态文件服务等功能的Web服务器。

  对于客户端,http.Get 等函数可以方便地发起HTTP请求。

net/rpc:

  net/rpc 包是用来实现远程过程调用(RPC)的,它允许一个程序调用另一个在网络上不同地址空间的程序提供的方法,就像调用本地函数一样。

  RPC基于的是自定义的协议,通常更轻量级,不涉及HTTP的完整头部信息。Go的 net/rpc 默认使用了 encoding/gob 进行数据编码,这是一种针对Go语言设计的高效编码格式。

  在 net/rpc 中,你需要定义一个结构体并标记为可导出,然后注册到 RPC 服务器,客户端就可以 通过网络 调用这些结构体的方法。

  net/rpc 提供了简单的客户端和服务器API,如 rpc.Dial 和 rpc.Register,使得编写 RPC 服务相对简单。

总结来说,net/http 更关注于HTTP协议的Web服务,适合构建 Web应用和 API,而 net/rpc 则更专注于提供内部或者对Go友好的远程调用机制,它的接口设计更接近于本地函数调用。

如果你需要对外提供 RESTful API,net/http 是更好的选择;如果你需要在Go程序之间或者在跨语言边界内高效地进行远程调用,net/rpc 可能更合适。

那么 rpc 效率比 http 高吗 ?

RPC(Remote Procedure Call)通常被认为比HTTP更高效,尤其是在处理大量内部服务间通信或需要低延迟的情况下。

以下是一些原因:

1. 协议开销:

  RPC通常使用自定义的、轻量级的协议,这使得请求和响应的报文体积更小,减少了网络传输的数据量。

  相比之下,HTTP协议的报文头通常较大,包含了更多的元信息,这对于简单的 RPC 调用来说可能是不必要的开销。

2. 二进制编码:

  许多 RPC 框架使用二进制编码(如protobuf, Thrift, 或者Go的 gob),这种编码方式通常比HTTP中的文本编码(如JSON)更紧凑,因此传输更快。

3. 连接复用:

  RPC系统往往支持长连接,这意味着一旦建立了连接,就可以重复使用,减少了每次调用时的握手和关闭连接的开销。

  而HTTP 1.x 默认是短连接,每个请求都需要完整的三次握手和四次挥手过程。HTTP/2 引入了连接复用,但这需要额外的协议支持。

4. 请求格式:

  RPC通常直接映射到服务的方法调用,这避免了HTTP中需要解析URL路径和查询参数的开销。

然而,这并不意味着RPC总是比HTTP快。

HTTP在某些方面也有其优势,比如更好的跨语言支持、易于调试、缓存机制、以及与现有Web基础设施的兼容性。

在处理复杂的HTTP请求,如文件上传、流媒体等时,HTTP可能更合适。

在实际应用中,选择 RPC 还是 HTTP 取决于具体的需求,如性能要求、兼容性、可维护性等因素。

在现代微服务架构中,两者都有广泛的应用。

Link:https://www.cnblogs.com/farwish/p/18231614

golang 的 net/http 和 net/rpc 的区别, rpc 效率比 http 高?的更多相关文章

  1. RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。

    RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...

  2. MQ & RPC 消息队列与RPC的区别与使用场景

    MQ:  区别:面向数据.生产者与消费者.有缓冲节点.异步.系统级/模块级通信 选型:RabbitMQ.ActiveMQ/Apollo.ZeroMQ.memcacheQ.Redis.MSMQ.kafk ...

  3. Java RMI与RPC的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542811.html  一:RPC 远程过程调用 RPC(Remote Procedure Call Prot ...

  4. Dubbo与Hadoop RPC的区别

    本文来自网易云社区 RPC(Remote Procedure Call,远程过程调用)是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编 ...

  5. rmi与rpc的区别

    这里简单说一下RMI和RPC的区别. 什么是RMI RMI(Remote Method Invocation,远程方法调用),能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端Java虚 ...

  6. C# -- 高性能RPC框架:Socean.RPC

    简介 Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能.高稳定性为目标,底层基于socket,无第三方库引用,代码简洁,总代码量大约在2000行,框架性能较高,在普通PC上测试,长 ...

  7. 应答流式RPC 请求流式RPC 向流式RPC 流式RPC的三种具体形式

    https://mp.weixin.qq.com/s/pWwSfXl71GQZ3KPmAHE_dA 用Python进行gRPC接口测试(二) 大帆船 搜狗测试 2020-02-07   上期回顾:用P ...

  8. 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc

    不久前发布了一篇博文".NET轻量级RPC框架:Rabbit.Rpc",当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性 ...

  9. RPC原理及RPC实例分析

    在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 1 2 3 4 5 6 public class ...

  10. 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V1 -- 本地方法调用

    网络编程 -- RPC实现原理 -- 目录 啦啦啦 V1——RPC -- 本地方法调用:不通过网络 入门 1. RPCObjectProxy rpcObjectProxy = new RPCObjec ...

随机推荐

  1. i-MES生产制造管理系统-老化时间管控

    在生产过程中,产品的可靠性是影响其性能和寿命的关键因素,因此提高产品的可靠性是十分必要的,而老化测试是提高产品可靠性的重要手段之一,老化的时间随着产品不同而变化,因此老化时间管控变得尤为重要! 在ME ...

  2. Serverless 选型:深度解读 Serverless 架构及平台选择

    作者 | 悟鹏  阿里巴巴技术专家 导读:本文尝试以日常开发流程为起点,分析开发者在每个阶段要面对的问题,然后组合解决方案,提炼面向 Serverless 的开发模型,并与业界提出的 Serverle ...

  3. 做ToB软件质量保障的这两年

    ​简介:自己算是阿里的老兵了,从实习开始一直投身在 toB 业务的质量保障领域内,不能说是资深的专家,但所经历的.感受的业务特点和体会还是具有一定的代表性,希望能通过这篇文章,总结一下过往,并能和已经 ...

  4. 阿里云PolarDB开源数据库社区与 Tapdata 联合共建开放数据技术生态

    ​简介:近日,阿里云PolarDB开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态. 近日,阿里云PolarDB开源数据库社区宣布将与 Tapdata 联合共建开放数据技术生态.在此之 ...

  5. 应用容灾中,MySQL数据表是否需要跨云同步?

    简介: 容灾系统的重要目标在于保证系统数据和服务的"连续性".当系统发生故障时,容灾系统能够快速恢复服务和保证数据的有效性.为了防止天灾人祸.不可抗力,在同城或异地建立对应的IT系 ...

  6. 阿里云云效发布研发协同工具,以新的产研协同工作方式助力实现BizDevOps

    ​简介:2021云栖大会云效BizDevOps分论坛上,阿里云云效技术负责人陈鑫发布阿里云云效产品研发协同工具支撑ALPD理论,以新的产研协同工作方式助力实现BizDevOps. 编者按:10月21日 ...

  7. MaxCompute Spark 资源使用优化祥解

    简介: 本文主要讲解MaxCompute Spark资源调优,目的在于在保证Spark任务正常运行的前提下,指导用户更好地对Spark作业资源使用进行优化,极大化利用资源,降低成本. 本文作者:吴数傑 ...

  8. k8s核心资源Job&&CronJob调度pod

    一.Job与CronJob概念与与原理解读 Job 控制器用于管理 Pod 对象运行一次性任务,比方说我们对数据库备份,可以直接在 k8s 上启动一个 mysqldump 备份程序,也可以启动一个 p ...

  9. STM32F10x 串口使用DMA

    一.DMA简介 DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载.否则,CPU 需要 ...

  10. js实现打字机效果(完整实例)

    在上篇css高斯模糊的效果基础上用js实现一个打字机效果: 上图: 代码: <!DOCTYPE HTML> <html lang="en-US"> < ...