返回顶部
首页 > 资讯 > 后端开发 > GO >使用GoHTTP客户端打造高性能服务
  • 763
分享到

使用GoHTTP客户端打造高性能服务

2024-04-02 19:04:59 763人浏览 泡泡鱼
摘要

目录问题一:默认的 Http Client 问题二:默认的 Http Transport 总结 HTTP(超文本传输协议)是一种用于客户端和服务器之间传输数据的通信协议。如果想要访问

HTTP(超文本传输协议)是一种用于客户端和服务器之间传输数据的通信协议。如果想要访问服务器资源,HTTP 请求是必不可少的。Go 语言里,net/http 包附带了默认配置,我们可以适当调整便可以获得高性能。

大多数语言都有提供各自的 HTTP 客户端,文章接下来部分我们将动手实践如何使用 Go 语言发起 HTTP 请求,并讨论其中有可能遇到的问题。

在做 Go 项目时,我就意识到 HTTP 客户端如果配置不正确可能会随时导致服务器崩溃。

在使用 HTTP Client 时,我观察到一些问题并总结出相应的解决方案,如下所示:

问题一:默认的 HTTP Client

默认情况下,net/http 包自带的 HTTP 客户端不带超时时间。如果你使用的是默认的客户端 http.DefaultClient(),这个是不带超时时间的。

假如你请求外部的 api 挂了,发出的请求没响应导致连接一直出于打开状态。随着请求数越来越多,连接数随之增加,导致耗尽服务器的资源,最后服务器随之崩溃。

解决办法:不要使用默认的 HTTP 客户端,根据实际情况设置超时时间。


var httpClient = &http.Client{
  Timeout: time.Second * 10,
}

对于 API 接口,超时时间建议不需要超过 10s,如果请求在 10s 内没有返回,则请求会取消并报错:request canceled (Client.Timeout exceeded …) 。

问题二:默认的 Http Transport

默认情况下,HTTP 客户端会维护一个连接池。当请求完成之后,连接会保持打开状态直到空闲时间超时(默认是 90s)自动断开。如果有请求过来,会优先使用已打开的连接而不是创建新的连接,请求完成之后,连接会返还到连接池中。

使用连接池将使用最少的服务器资源处理更多的 API 请求。

如果没有自定义 HTTP 客户端的 transport,将会使用默认配置。

HTTP Transport 的默认配置如下:


var DefaultTransport RoundTripper = &Transport{
    ...
    MaxIdleConns:          100,
    IdleConnTimeout:       90 * time.Second,
    ...
}

 
const DefaultMaxIdleConnsPerHost = 2

MaxIdleConns 表示连接池大小,是可以打开的最大连接数,默认值是 100。

参数 DefaultMaxIdleConnsPerHost 的默认值是 2,表示每个主机(host)的打开连接数。这意味着,连接池中 100 个连接只有两个连接分配给该主机。

随着请求增多,但是只有两个请求被处理,其他请求只能被迫等待并进入 TIME_WaiT 状态。请求增多,进入 TIME_WAIT 状态的连接数增多,消耗越来越多的服务器资源,当达到服务器瓶颈时,服务器将会崩溃。

解决办法:提高 MaxIdleConnsPerHost 数值,不要使用默认的 Transport。


t := http.DefaultTransport.(*http.Transport).Clone()
t.MaxIdleConns = 100
t.MaxConnsPerHost = 100
t.MaxIdleConnsPerHost = 100

httpClient = &http.Client{
  Timeout:   10 * time.Second,
  Transport: t,
}

通过增加每个主机的连接数和空闲连接数,就有助于提高性能并以最少的服务器资源处理更多请求。

可以根据服务器资源和实际需求适当增加连接池大小和每个主机的连接数。

总结

这篇文章中,我们围绕 net/http 包讨论了默认配置的一些问题。通过更改 HTTP 客户端的一些默认设置,在生产环境中也可以获得高性能的 HTTP 客户端。

到此这篇关于使用Go HTTP客户端打造高性能服务的文章就介绍到这了,更多相关Go HTTP客户端高性能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 使用GoHTTP客户端打造高性能服务

本文链接: https://lsjlt.com/news/159485.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用GoHTTP客户端打造高性能服务
    目录问题一:默认的 HTTP Client 问题二:默认的 Http Transport 总结 HTTP(超文本传输协议)是一种用于客户端和服务器之间传输数据的通信协议。如果想要访问...
    99+
    2024-04-02
  • C++ 实现高性能HTTP客户端
    目录一、什么是Http Client二、请求的过程1. 创建Http任务2. 填写header并发出3. 处理返回结果三、高性能的基本保证1. 异步调度模式2. 连接复用3. 解锁其...
    99+
    2024-04-02
  • Node.js 入门:打造高性能服务器端应用程序
    Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它采用事件驱动和非阻塞 I/O 模型,使其非常适合处理大量并发连接和数据密集型任务。借助 Node.js,开发人员可以使用 Jav...
    99+
    2024-03-09
    Node.js、服务器端、高性能、可扩展性
  • 如何利用Go语言打造高效的HTTP客户端?
    在现代的Web应用程序中,HTTP客户端是一个不可或缺的组件。不论是向第三方API发送请求,还是在应用程序内部调用其他服务,我们都需要一个可靠、高效的HTTP客户端。本文将介绍如何使用Go语言编写一个高效的HTTP客户端。 一、Go语言中...
    99+
    2023-11-09
    http numpy unix
  • 怎么打造高性能Java应用
    本篇内容介绍了“怎么打造高性能Java应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于性能调优,通常会有三个步骤:1,性能监控;2,性...
    99+
    2023-06-17
  • 如何使用PHP打造高性能的直播功能?
    随着网络技术和移动设备的不断发展,直播已成为一种流行的方式来分享和传播信息。而PHP被广泛应用于Web编程,也能用来实现高性能的直播功能。本文将介绍如何使用PHP打造高性能的直播功能。选择合适的PHP框架选择一个高性能的PHP框架是实现高性...
    99+
    2023-05-22
    PHP 高性能 直播功能
  • PHP高级特性:HTTP客户端与服务器实战
    php提供http客户端库(curl、guzzlehttp)进行http请求发送,还支持创建http服务器(如swoole)。实战案例包括使用curl从api获取数据以及利用swoole...
    99+
    2024-05-16
    php http swoole
  • Android打造属于自己的新闻平台(客户端+服务器)
    完全属于自己的新闻展示平台,展示给大家,希望大家喜欢。 一、新闻的数据库的构建 脚本代码如下:(使用的mysql5.0 数据库) SET SQL_MODE = "NO_AUT...
    99+
    2022-06-06
    客户端 服务器 Android
  • 玩转服务器性能优化,打造极致用户体验
    硬件优化 增加内存 (RAM):内存是服务器运行中的程序和数据存储的地方。增加内存可以减少磁盘读写,提高服务器的响应速度。 选择高效的 CPU:选择具有高主频和大量内核的 CPU,可以提高服务器的多任务处理能力。 使用 SSD 硬盘:S...
    99+
    2024-03-01
    服务器性能优化 服务器配置 数据库优化 编码优化 缓存优化
  • [AIGC] 快速掌握Netty,打造高性能IM服务器!
    前言:Netty 是一个非常优秀的网络应用程序框架,支持高并发、高性能的网络通信,适用于开发各种服务器程序,如即时通讯、游戏、物联网等。使用 Netty 可以大大提升服务器程序的性能和可靠性。本文...
    99+
    2023-10-21
    AIGC 服务器 运维
  • python3实现ftp服务功能(客户端)
    本文实例为大家分享了python3实现ftp服务功能的具体代码,供大家参考,具体内容如下 客户端 main代码: #Author by Andy #_*_ coding:utf-8 _*_ ''' T...
    99+
    2022-06-04
    客户端 功能 ftp
  • 云服务器如何使用ssr客户端
    使用SSR客户端可以很方便地在云服务器上创建和管理数据库。以下是一些示例: 创建新的数据库连接: 首先,在您的云服务上创建一个新的数据库连接。在连接上添加“openservers”选项,然后将“openserver”设置为您要连接的云...
    99+
    2023-10-27
    如何使用 客户端 服务器
  • 微服务(二) php laravel 用户客户端
    本节主要讲解通过laravel 作为客户端调用go kratos 服务端,实现用户注册登录 环境 docker desk laradock laravel 环境准备 通过laradock php-fp...
    99+
    2023-10-02
    php 微服务 laravel
  • PHP 高可用性:打造无缝用户体验的蓝图
    在竞争激烈的数字时代,用户体验至关重要。高可用性是确保用户享受无缝体验的关键,这对于基于 PHP 的应用程序尤其重要。本文提供了一个蓝图,阐述了如何实现 PHP 高可用性,从而极大地提升用户满意度和业务成功。 负载均衡 负载均衡通过将请求...
    99+
    2024-04-02
  • python rpyc客户端怎么调用服务端
    这篇文章主要介绍“python rpyc客户端怎么调用服务端”,在日常操作中,相信很多人在python rpyc客户端怎么调用服务端问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pytho...
    99+
    2023-07-02
  • 使用Python完成SAP客户端的打开和系统登陆功能
    最近小爬一直思忖着如何将以前写的一些半自动化程序转为全自动化,这其中就涉及到SAP的打开和登录过程。我们都知道,SAP原生的“脚本录制和回放”功能是在用户进入...
    99+
    2024-04-02
  • 自建云服务器:打造高性能的云计算环境
    1. 了解自建云服务器的成本 自建云服务器是一种将服务器资源部署在自己的数据中心或机房的方式,可以提供高度可定制化和灵活性的云计算环境。然而,自建云服务器的成本因多种因素而异,包括硬件设备、网络带宽、维护费用等。 2. 硬件设备成本 自建...
    99+
    2023-10-27
    高性能 环境 服务器
  • nodejs socket服务端和客户端简单通信功能
    本文实例讲述了通过node.js的net模块实现nodejs socket服务端和客户端简单通信功能,可以用作客户端对服务端的端口监听以及事件回执。 server端代码 var net = requir...
    99+
    2022-06-04
    服务端 客户端 简单
  • C#实现MQTT服务端与客户端通讯功能
    关于MQTT MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设...
    99+
    2024-04-02
  • Node.js 与 WebAssembly:强强联手,打造高性能应用
    随着网络应用技术的发展,对高性能应用的需求不断提高。Node.js 作为一种流行的异步事件驱动 JavaScript 运行时环境,以其高并发、低延迟的特点受到众多开发者的青睐,但受限于 JavaScript 的解释执行方式,在大数据计算...
    99+
    2024-02-10
    Node.js WebAssembly 高性能应用 二进制格式 JavaScript 底层支持
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作