golang HTTPサーバーを受け入れ、このコードからコンパイルしません:golang HTTPサーバは、ポスト、大規模なデータの現在のタイムトライ使用で
package main
import (
"io"
"net/http"
"time"
)
func hello(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
io.WriteString(w, "Hello world!")
}
var mux map[string]func(http.ResponseWriter, *http.Request)
func main() {
server := http.Server{
Addr: ":8000",
MaxHeaderBytes: 30000000,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
Handler: &myHandler{},
}
mux = make(map[string]func(http.ResponseWriter, *http.Request))
mux["/"] = hello
server.ListenAndServe()
}
type myHandler struct{}
func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if h, ok := mux[r.URL.String()]; ok {
h(w, r)
return
}
io.WriteString(w, "My server: "+r.URL.String())
}
はそれを実行し、Apacheのベンチを介してテストデータを送信
ab.exe -c 30 -n 1000 -p ESServer.exe -T application/octet-stream http://localhost:8000/
小さなファイルではうまくいっていますが、ESServer.exeのサイズは8Mbです。次のエラー "apr_socket_recv:リモートホストによって強制的に既存の接続が閉じられました。(730054)"
どのような問題が発生する可能性がありますか?
をすることができますあなたがファイルディスクリプタまたは一時的なポートを使い果たしているとき。次に、あなたのマルチプレクサは安全ではなく、同時リクエストの下でパニックになります。 – JimB
@jimb abは '-k'でキープアライブを行うのが嬉しいです。 – hobbs
@hobbs:はい、それでもhttp/1.0ですが、ここの例では '-k';を使用していませんでした;)(go httpサーバはこれらの考案されたマイクロベンチマークで' ab'よりも優れている可能性があります。サーバをテストしているように) – JimB