目前尝试使用 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 Bench 发送测试数据

ab.exe -c 30 -n 1000 -p ESServer.exe -T application/octet-stream http://localhost:8000/  

它在处理小文件时表现出色,但 ESServer.exe 的大小为 8Mb,我收到下一个错误“apr_socket_recv:现有连接被远程主机强行关闭。(730054)。”

可能会出现什么问题?

请您参考如下方法:

您没有读取请求正文,因此一旦所有缓冲区都已填满,每个请求都会阻塞。你总是需要完整地读取请求或者强制断开客户端,以避免请求挂起并消耗资源。

至少,你可以

io.Copy(ioutil.Discard, r.Body) 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!