golangでhttpロングリンクの使用方法(clientエンド)
1273 ワード
RESTFUL要求の大部分は短い接続を使うことができて、つまり3回の握手でリンクを創立して、データを交換して完成した後、解放したリンク、短いリンクは長い間ポート番号を占有することはできなくて、実際のプロジェクトの中でまた別の1種を使って、長いリンク、例えばクライアントはRESTFUL要求を送って、ある資源の変化状況を監視する必要があって、サービス側はwatchのメカニズムを提供して、リソースが変化した場合にclient側に通知します.
ではクライアント側は、短いリンクに対して、長いリンクはどのように書くべきでしょうか.
短いリンクと基本的には,server側が返すresponseをループして読み取るだけでよい.
参照先:https://stackoverflow.com/questions/10152478/how-to-make-a-long-connection-with-http-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