美文网首页
2019-08-23, golang http server

2019-08-23, golang http server

作者: onmeiei | 来源:发表于2019-08-29 09:06 被阅读0次
    for {
        rw, e := l.Accept()
        if e != nil {
            select {
            case <-srv.getDoneChan():
                return ErrServerClosed
            default:
            }
            if ne, ok := e.(net.Error); ok && ne.Temporary() {
                if tempDelay == 0 {
                    tempDelay = 5 * time.Millisecond
                } else {
                    tempDelay *= 2
                }
                if max := 1 * time.Second; tempDelay > max {
                    tempDelay = max
                }
                srv.logf("http: Accept error: %v; retrying in %v", e, tempDelay)
                time.Sleep(tempDelay)
                continue
            }
            return e
        }
        tempDelay = 0
        c := srv.newConn(rw)
        c.setState(c.rwc, StateNew) // before Serve can return
        go c.serve(ctx)
    }

去掉错误处理

    for {
        rw, e := l.Accept()
        //去掉了错误处理
        tempDelay = 0
        c := srv.newConn(rw)
        c.setState(c.rwc, StateNew) // before Serve can return
        go c.serve(ctx)
    }

因为协程go的存在,不需要写复杂的逻辑就可以完成多路请求的并发处理。无需像netty框架的NioEeventLoopGroup一样一顿操作猛如虎了。

但是世界上没有免费的午餐,所有的通用型逻辑都有其妥协之处。定制的代码才是性能最高的。

后续看看能不能看懂goroutine的逻辑及其大量协程存在时的性能问题的原因。

相关文章

网友评论

      本文标题:2019-08-23, golang http server

      本文链接:https://www.haomeiwen.com/subject/lerosctx.html