golang中如何使用http长链接(client端)

Posted Golang语言社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang中如何使用http长链接(client端)相关的知识,希望对你有一定的参考价值。

RESTFUL请求大部分都可以用短连接,即三次握手建立链接,交换数据完成后,释放掉的链接,短链接不会长时间占用端口号,实际项目中还会用到另一种,长链接,比如客户端发送RESTFUL请求,需要监测某一资源变化情况,服务端提供watch机制,在资源有变化时通知client端。

那么client端,相对于短链接,长链接应该怎么写呢?

和短链接基本一样,只需要循环读取server端返回的response即可。

  1. package main


  2. import (

  3.         "fmt"

  4.         "io"

  5.         "log"

  6.         "net/http"

  7. )


  8. func main() {

  9.         request, err := http.NewRequest("GET", "http://www.example.com/", nil)

  10.         if err != nil {

  11.                 log.Fatal(err)

  12.         }


  13.         http_client := &http.Client{}

  14.         response, err := http_client.Do(request)

  15.         if err != nil {

  16.                 log.Fatal(err)

  17.         }


  18.         buf := make([]byte, 4096) // any non zero value will do, try '1'.

  19.         for {

  20.                 n, err := response.Body.Read(buf)

  21.                 if n == 0 && err != nil { // simplified

  22.                         break

  23.                 }


  24.                 fmt.Printf("%s", buf[:n]) // no need to convert to string here

  25.         }

  26.         fmt.Println()

  27. }

复制代码

以上是关于golang中如何使用http长链接(client端)的主要内容,如果未能解决你的问题,请参考以下文章

golang中可变长参数的使用

Connection: close

golang http client keep-alive最大连接数

EasyDSS/EasyNTS通过Golang使用http如何优化响应body未关闭的问题?

grpc原理

golang http proxy反向代理