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连接的超时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值