美文网首页
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