• 晨曦
    2018-11-28
    “人生的道路都是由心来描绘的,所以,无论自己处于多么严酷的境遇之中,心头都不应为悲观的思想所萦绕。”
    被老师的精神打动,真心祝愿早日康复!
    
     15
  • 嘎嘎
    2019-04-04
    看测试用例中是用 srv.Shutdown(context.Background()) 的方式停止服务,通过RegisterOnShutdown可添加服务停止时的调用

    作者回复: 对的。

    
     5
  • Michael
    2018-11-30
    看了下源码之后感觉应该这样做:

    quit := make(chan os.Signal, 1)
    signal.Notify(quit, os.Interrupt, syscall.SIGTERM)

    server := http.Server{..}

    go func(){
         server. ListenAndServe()
    }()

    <-quit

    server.Shutdown()

    Shutdown 并不会立即退出,他会首先停止监听,并且启动一个定时器,避免新的请求进来,然后关闭空闲链接,等待处理中的请求完成或者如果定时器到了,再退出,和 NGINX 的 平滑退出很像。
    展开
    
     2
  • My dream
    2018-11-28
    老师可以讲一下这个不:gomonkey,我看半天都没明白这个打桩是什么意思
    
     2
  • aebn
    2018-11-28
    谢谢老师分享,努力学习中^_^
    
     1
  • 袁树立
    2019-10-23
    如此一来,每当一个 HTTP 请求被递交时,就都会产生一个新的网络连接。这样做会明显地加重网络服务以及客户端的负载,并会让每个 HTTP 事务都耗费更多的时间。所以,在一般情况下,我们都不要去设置这个DisableKeepAlives字段。

    老师,针对这句话,有个问题。
    因为我们的服务调用其他内网接口,会通过公司的负载均衡。七层负载均衡是关闭了keep-alive的。所以我们的http就每次都是短链接。 那每次http事务耗费的时间大概是什么量级? 我这里看到,设置了500ms超时的情况下。在频繁请求的场景,每过几分钟就会有一批超时。报net/http timeout 。
    用http trace看,是在getConn前就耗费了500ms

    请问,这种情况正常吗?
    展开

    作者回复: 这个问题太复杂了。你们的网络拓扑、中间件版本和配置以及 Go 程序本身等等都可能会对此影响。你们需要有 request id,然后串起来进行分析。

    定位问题需要定位到某一个或某几行代码。只知道在 getConn 前耗时的话,粒度太粗了。有必要的话,需要跟进 net 包的源码。

    另外,怎样设置需要按照你们的实际情况来。我不知道你们具体因为什么关闭 ka,也许是合理的,也许不是。不论怎样,这相当于放弃了对操作系统底层优化机制的利用。

    
    
  • 上山的o牛
    2019-10-12
    学习中,衍生的内容可以看一周
    
    
  • qiushye
    2019-10-11
    http.Transport里没有MaxConnsPerHost字段了,article36/q1的程序运行报错

    作者回复: Go 1.13 里依然有啊。

     1
    
  • 路人
    2019-07-14
    这节老师讲得特别好,特别是问题的衍生能思考到很多go的其他重要模块,比如net、io等。
    
    
  • Timo
    2019-06-13
    demo91.go 例子中
    reqStrTpl := `HEAD / HTTP/1.1
    Accept: */*
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Host: %s
    User-Agent: Dialer/%s
    `
    协议和头信息之间要空两行,才能正常发出信息
    展开
     1
    
  • 虢國技醬
    2019-03-15
    打卡
    
    
我们在线,来聊聊吧