golang http长连接
golang http长连接
http的长连接
golang 的net/http库默认支持长连接。
通过ListenAndServe源码可以看到。
for {rw, e := l.Accept()...go c.serve(ctx)}
每一个tcp连接,go都会对应一个协程对其服务,再server内,源码显示
for {w, err := c.readRequest(ctx)if c.r.remain != c.server.initialReadLimitSize() {// If we read any bytes off the wire, we're active.c.setState(c.rwc, StateActive)}serverHandler{c.server}.ServeHTTP(w, w.req)....c.rwc.SetReadDeadline(time.Time{})}
在这个函数内,我们会发现对于每一个tcp连接,go支持长连接,等待新的请求过来。
我们可以在服务端设定服务的超时时间,在ListenAndServe之前。
l4g.Info("ListenAndServer: %v end", serveraddr)srv := &http.Server{Addr: serveraddr,Handler: mux,IdleTimeout: 1 * time.Minute,ReadTimeout: 5 * time.Second,WriteTimeout: 10 * time.Second,}err = srv.ListenAndServe()
设定服务段对于客户端的连接超时时间的设定,注意,这个超时指的是tcp连接的超时