首页 > 其他分享 >golang 的 net/http 和 net/rpc 的区别, rpc 效率比 http 高?

golang 的 net/http 和 net/rpc 的区别, rpc 效率比 http 高?

时间:2024-06-04 20:00:39浏览次数:25  
标签:调用 HTTP RPC rpc http net

 

在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

标签:调用,HTTP,RPC,rpc,http,net
From: https://www.cnblogs.com/farwish/p/18231614

相关文章

  • 【信息化人员必备知识&面试宝典】HTTP协议的状态码:那些数字背后的秘密
    【信息化人员必备知识&面试宝典】HTTP协议的状态码:那些数字背后的秘密状态码的分类与基本概念核心状态码解读与实战案例一:200OK——一切安好案例二:404NotFound——迷失的页面案例三:301MovedPermanently——永久搬家案例四:500InternalServerError——服务......
  • 1500PLC通过232自由口转profinet网关接ABB扫码枪通讯方案
    一、现状:在实际的生产环境中,越来越多的自动化设备采用扫码枪录入代替手动录入信息的方式进行操作。二、了解现场现场要求在不动其他设备和程序的情况下让ABB扫码枪与1500PLC通讯,在拿到现场的需求时兴达易控的专项技术为其制定了方案。 三、制定方案:在不动其他设备和程序的......
  • 34、nginx-公网CA加密部署-网站https部署-阿里云
    1、购买阿里云服务器2、安装nginx、打开访问3、购买域名、域名解析、解析后可用域名去访问网站 4、购买ssl证书  5、这里我申请免费证书    验证通过后、提交审核即可这一步表示证书已买好了、点击下载 下载完将证书包拉到服务器上的/etc/nginx ......
  • 33、nginx-CA和https(http+ssl(安全套接字))私有CA--网站加密(443 ssl https)-加密密钥key
    算法:将原有的值通过一些算法来进行加密对称算法(加密和解密的过程用的钥匙是相同的):AES\DES\3DES非对称算法(加密和解密的过程中使用的钥匙是不一样的):DH\RSAhash算法:MD5=========================================SSL安全套接字===================================......
  • pvt对net delay的影响
    我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?拾陆楼知识星球入口有星球成员提问:pt中在同一个corner下的net的为啥在min和max的情况下读RC值是不一样的呢??不应该都是根据spef来的吗??回答:这个其实是个误区,相同RCcorner情况下我们看report_delay_calculation-from-......
  • .Net项目快速生成数据库的实体类
    MySQL数据库在NuGet包管理中安装以下包,选择符合项目.Net版本的包Microsoft.EntityFrameworkCore.ToolsMicrosoft.EntityFrameworkCore.DesignMySql.EntityFrameworkCore 在程序包控制管理台执行以下命令Scaffold-DbContext"DataSource=localhost;InitialCatalog=mydb;......
  • ado.net datetable批量新增
    publicQueryResultSqlBulkCopy(DataTabledt,stringtableName){try{connection.Open();using(varcopy=newSqlBulkCopy(connection)){copy.DestinationTableName=tableName;copy.WriteToServer(dt......
  • netplan网络配置@ubuntu留档
    ubuntu使用netplan进行网络配置,简单又方便。配置的时候编辑/etc/netplan目录里的文件即可,如00-installer-config.yaml文件。固定ip配置network:ethernets:enp0s5:dhcp4:noaddresses:[192.168.1.7/24]routes:-to:default......
  • Netty线程模型
    在Netty编程模型入门案例中客户端和服务端通信底层如何实现的呢?先看客户端和服务端的类图:两类图大致一样,区别在于ServerBootstrap与EventLoopGroup是组合关系,而Bootstrap与EventLoopGroup之间没有直接的关系。实际在......
  • HTTP
    前端三剑客HTML骨架CSS衣服JAVASCRIPT动作BOOTSTRAP(HTML+CSS)前后端结合UI框架特点小而轻便容易上手*Vue框架axios工具JQuery(javascript)封装了一系列JS操作,可以大大简化js代码和操作方式封装了一个工具ajax浏览器请求步骤输入地址网址......