golangでhttpロングリンクの使用方法(clientエンド)

1273 ワード

RESTFUL要求の大部分は短い接続を使うことができて、つまり3回の握手でリンクを創立して、データを交換して完成した後、解放したリンク、短いリンクは長い間ポート番号を占有することはできなくて、実際のプロジェクトの中でまた別の1種を使って、長いリンク、例えばクライアントはRESTFUL要求を送って、ある資源の変化状況を監視する必要があって、サービス側はwatchのメカニズムを提供して、リソースが変化した場合にclient側に通知します.
ではクライアント側は、短いリンクに対して、長いリンクはどのように書くべきでしょうか.
短いリンクと基本的には,server側が返すresponseをループして読み取るだけでよい.
package main

import (
        "fmt"
        "io"
        "log"
        "net/http"
)

func main() {
        request, err := http.NewRequest("GET", "http://www.example.com/", nil)
        if err != nil {
                log.Fatal(err)
        }

        http_client := &http.Client{}
        response, err := http_client.Do(request)
        if err != nil {
                log.Fatal(err)
        }

        buf := make([]byte, 4096) // any non zero value will do, try '1'.
        for {
                n, err := response.Body.Read(buf)
                if n == 0 && err != nil { // simplified
                        break
                }

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

参照先:https://stackoverflow.com/questions/10152478/how-to-make-a-long-connection-with-http-client