`

http client 短链接复用(变为长连接)

 
阅读更多

 

背景:

 

  go在做服务之间调用时http client会消费系统的tcp资源(大量并发会耗费掉系统资源,资源有限),故此需要复用

 

1.复用

 

func HttpPostJson(client *http.Client, url string, jsonstr string) (bool, error) {
	var request *http.Request
	bytesData := []byte(jsonstr)
	reader := bytes.NewReader(bytesData)
	request, err = http.NewRequest("POST", url, reader)
	if err != nil {
		httpLog.Println(err)
		return false, err
	}
	request.Header.Set("Content-Type", "application/json;charset=UTF-8")
	response, err := client.Do(request)

	if err != nil {
		httpLog.Println(err)
		return false, err
	}

	if response.StatusCode != 200 {
		httpLog.Println("http resp code=", response.StatusCode, err)
		reqResult, err := ioutil.ReadAll(response.Body)
		if err != nil {
			httpLog.Println(err)
			return false, nil
		}

		httpLog.Println(reqResult)

		return false, nil
	}
        //这块关闭才能复用,循环调用即可复用,不要关闭client 
	response.Body.Close()

	return true, nil
}

 

 

也可以建立连接池

const (
	IdleConnTimeout int = 90
)

var (
   DefaultTransport *http.Transport = &http.Transport{
   	Proxy: http.ProxyFromEnvironment,
	DialContext: (&net.Dialer{
		Timeout:   60 * time.Second,
		KeepAlive: 60 * time.Second,
	}).DialContext,
	MaxIdleConns:        int(512), //不能使用参数变量,否则初始化不上
	MaxIdleConnsPerHost: int(512),
	IdleConnTimeout:	 time.Duration(IdleConnTimeout)* time.Second,
}
)

func createHTTPClient() *http.Client {
	client := &http.Client{
		Transport:DefaultTransport,
		Timeout: 60 * time.Second,
	}
	return client
}

 

 

 

分享到:
评论

相关推荐

    TCP中长连接短连接

    本文将详细探讨TCP中的长连接和短连接,这两种连接方式在实际应用中的差异和选择。 长连接,也称为持久连接,指的是客户端(Client)与服务器端(Server)在完成连接建立后,保持连接状态不立即断开,以便于进行多...

    netty 实现长连接

    在传统的HTTP或WebSocket等协议中,每次请求都是一个短连接,而长连接则允许客户端和服务器之间保持持续的连接状态,从而减少建立连接的开销,提高通信效率。 描述中的链接指向了一篇关于Netty实现长连接的博客文章...

    MQTT长连接

    与HTTP协议的短连接不同,MQTT的长连接允许客户端和服务器之间保持持续的会话状态,从而减少了建立和关闭连接的开销,提高了数据传输效率。这种连接方式对于需要频繁交换数据或者需要长时间在线的设备尤其重要,例如...

    Mina长连接短连接实例

    本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...

    [线上问题] Nginx与Tomcat、Client之间请求的长连接配置不一致问题分析解决

    2. **Nginx配置**:Nginx是一个高性能的HTTP和反向代理服务器,它支持长连接和短连接。在Nginx中,可以通过配置来控制连接的类型,例如,通过设置`keepalive_timeout`和`proxy_http_version`等参数来启用和调整长...

    TCP/IP长连接和短连接

    在TCP/IP通信程序设计中,长连接和短连接是两种主要的连接方式,它们各自有其特点和适用场景。理解这两种连接方式对于开发者来说至关重要,因为它们直接影响到系统的效率、资源管理和安全性。 **长连接**是指客户端...

    C#服务器推技术(http长连接)的应用实例

    2.不再定时不断请求Http请求,降低服务器资源消耗,可参考Taobao核心系统团队博客《http长连接200万尝试及调优》; 3.TX微博等很多应用均采用服务器推技术,你还在用Ajax? 网上关于服务器推技术的文章多,但关于.net...

    Mac RD Client 远程连接 两款远程连接工具.zip

    本文将详细介绍Mac用户如何使用RD Client进行远程连接,并探讨两款适用于Mac的远程连接工具。 标题中的"Mac RD Client"指的是Mac版本的Remote Desktop Client,这是一种允许用户通过网络访问并控制其他计算机桌面的...

    基于Apache Mina实现的TCP长连接和短连接实例

    ### 基于Apache Mina实现的TCP长连接和短连接实例 #### 一、引言 Apache Mina是Apache组织推出的一款优秀的网络应用程序框架,它的全称是Multipurpose Infrastructure for Network Applications(多用途网络应用...

    TCP长短连接简单Demo

    TCP连接分为长连接和短连接,这两种连接方式各有其特点和适用场景。本Demo是用C++语言在VS2017环境下编写的,旨在帮助开发者理解TCP长连接和短连接的实现。 首先,我们要理解TCP连接的基本概念。TCP是一种面向连接...

    golang http连接复用方法

    在Golang中,HTTP连接复用是一种优化网络性能的技术,它允许HTTP客户端和服务器在完成一个请求后保持连接打开,以便后续的请求可以重用相同的连接,而不是每次都建立新的TCP连接。这大大减少了网络延迟,提高了应用...

    长连接,短连接的介绍

    长连接短连接介绍 1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开,然后再进行报文发送和接收。 2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种...

    CSharp HTTP长连接(Comet)

    传统的HTTP短连接模式下,每次请求都会建立新的连接,处理完后立即关闭,不适合需要持续通信的场景。而HTTP长连接(Comet)则旨在克服这个限制,保持连接打开状态,允许服务器在合适的时候主动推送数据。 二、Comet...

    OracleClient 数据库连接client

    Client当然是客户端程序,ORACLE 9I+PLSQL是服务器端程序。 但是日常管理你不可能每次都登录到服务器吧,Client就是可以让你不用登录服务器就可以远程管理的,那个PLSQL就是远程管理程序可以装在服务器,也可以装在...

    java socket长连接客户端服务端(标准实例)

    ### Java Socket 长连接客户端和服务端实现 在Java中,使用Socket进行网络通信是一种非常常见的技术手段。本文将详细解读“Java Socket长连接客户端服务端(标准实例)”的相关知识点,包括其实现原理、代码解析及...

    instantclient_11_2 连接Oracle 客户端32

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,它允许应用程序无需完整安装Oracle Database客户端即可与Oracle数据库进行通信。"instantclient_11_2" 是Oracle Instant Client的11.2版本,...

    instantclient_12_2 数据库连接使用的oci包

    Oracle Instant Client是Oracle公司提供的一款轻量级的数据库连接工具,主要用于在不安装完整Oracle数据库的情况下,让应用程序能够连接到远程Oracle数据库服务器。这个压缩包`instantclient_12_2`代表的是Oracle ...

    bitvise-ssh-client linux远程连接软件

    好用的一款linux远程连接软件bitvise-ssh-client,支持保存连接信息共享.

    instantclient_11_2 连接oracle数据

    Oracle Instant Client是Oracle公司提供的一款轻量级的客户端软件,主要用于在不安装完整Oracle数据库客户端的情况下,实现对Oracle数据库的连接和查询。标题中的“instantclient_11_2 连接oracle数据”指的是利用...

    C++实现HTTP,代码基于轻量级开源库mongoose,附带封装代码http_client

    在这个项目中,我们还将看到一个名为`http_client`的封装代码,它简化了客户端HTTP请求的处理。 首先,让我们了解HTTP的基础知识。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从Web服务器向...

Global site tag (gtag.js) - Google Analytics