Golang net/httpバッグは同時に複数のポートを傍受します。
922 ワード
背景はgolangで複数のポートを同時に傍受してhttp要求に対して同じ処理を行う必要があります。
実現する
コードは以下のとおり簡単です。
1そのままgoroutineにレンゲを使って出てくるvalueは、レンゲvariable v captured by func literalを提示します。
2 select{}forを使わないでループしてgoroutineを生成して直接に0.0を脱退しました。もちろん私達が欲しいのではないです。コードを一つ追加して止められます。
3もちろん、異なるポートで受信した情報を異なる処理するには、自分で判断を加える必要があります。
実現する
コードは以下のとおり簡単です。
func handler1(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello!")
}
func main() {
ports := []string{":25000", ":25001"}
for _, v := range ports {
go func(port string) { // goroutine
mux := http.NewServeMux()
mux.HandleFunc("/", handler1)
http.ListenAndServe(port, mux)
}(v)
}
select {}
}
注意点1そのままgoroutineにレンゲを使って出てくるvalueは、レンゲvariable v captured by func literalを提示します。
go func() {
mux := http.NewServeMux()
mux.HandleFunc("/", handler1)
http.ListenAndServe(v, mux)
}()
goroutineでvを使用すると、vの値はリストの最後の値になります。https://segmentfault.com/a/1190000010884717 2 select{}forを使わないでループしてgoroutineを生成して直接に0.0を脱退しました。もちろん私達が欲しいのではないです。コードを一つ追加して止められます。
3もちろん、異なるポートで受信した情報を異なる処理するには、自分で判断を加える必要があります。