47 | 基于HTTP协议的网络服务
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了基于HTTP协议的网络服务,并重点讨论了Go语言标准库中的`net`和`http`代码包。作者首先回顾了网络编程和socket相关内容,然后重点讲解了`net.Dial`和`net.DialTimeout`函数的使用,以及`net.Dialer`类型的底层实现。接着,作者介绍了使用`http.Get`函数访问基于HTTP协议的网络服务的便捷方式,并给出了相应的示例代码。文章还详细解释了`http.Client`类型中的`Transport`字段的含义,以及各个字段的具体作用和默认值。此外,还介绍了与空闲连接相关的字段,以及如何定制`Transport`值来控制连接的行为。总的来说,本文通过实际代码示例和技术细节,帮助读者快速了解了基于HTTP协议的网络服务的实现和使用方法。文章内容涉及了`http.RoundTripper`接口、`http.DefaultTransport`变量、`http.Transport`类型,以及`net.Dialer`类型,对于想深入了解网络编程和HTTP协议的读者来说,是一篇非常有价值的技术文章。文章还提出了思考题:如何优雅地停止基于HTTP协议的网络服务程序,为读者留下了一个值得深入探索的问题。
《Go 语言核心 36 讲》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 嘎嘎看测试用例中是用 srv.Shutdown(context.Background()) 的方式停止服务,通过RegisterOnShutdown可添加服务停止时的调用
作者回复: 对的。
2019-04-049 - 袁树立如此一来,每当一个 HTTP 请求被递交时,就都会产生一个新的网络连接。这样做会明显地加重网络服务以及客户端的负载,并会让每个 HTTP 事务都耗费更多的时间。所以,在一般情况下,我们都不要去设置这个DisableKeepAlives字段。 老师,针对这句话,有个问题。 因为我们的服务调用其他内网接口,会通过公司的负载均衡。七层负载均衡是关闭了keep-alive的。所以我们的http就每次都是短链接。 那每次http事务耗费的时间大概是什么量级? 我这里看到,设置了500ms超时的情况下。在频繁请求的场景,每过几分钟就会有一批超时。报net/http timeout 。 用http trace看,是在getConn前就耗费了500ms 请问,这种情况正常吗?
作者回复: 这个问题太复杂了。你们的网络拓扑、中间件版本和配置以及 Go 程序本身等等都可能会对此影响。你们需要有 request id,然后串起来进行分析。 定位问题需要定位到某一个或某几行代码。只知道在 getConn 前耗时的话,粒度太粗了。有必要的话,需要跟进 net 包的源码。 另外,怎样设置需要按照你们的实际情况来。我不知道你们具体因为什么关闭 ka,也许是合理的,也许不是。不论怎样,这相当于放弃了对操作系统底层优化机制的利用。
2019-10-231 - lesserror郝林老师,在demo94.go中这个字段的值: DualStack: true, 其中“DualStack”会被编辑器用横线从中穿过,并提示:'DualStack' is deprecated 。
作者回复: 这个字段现在已经被废弃了。DualStack 主要的作用是在对方服务器不支持 IPv6 协议或者配置错误的情况下快速回退到 IPv4。现在这个行为已经是默认的了。 如果想关掉,你可以通过把 FallbackDelay 字段设置为负值。我稍后会更新一下源码。
2021-09-02 - qiushyehttp.Transport里没有MaxConnsPerHost字段了,article36/q1的程序运行报错
作者回复: Go 1.13 里依然有啊。
2019-10-113 - 晨曦“人生的道路都是由心来描绘的,所以,无论自己处于多么严酷的境遇之中,心头都不应为悲观的思想所萦绕。” 被老师的精神打动,真心祝愿早日康复!2018-11-2827
- Michael看了下源码之后感觉应该这样做: 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 的 平滑退出很像。2018-11-3010
- My dream老师可以讲一下这个不:gomonkey,我看半天都没明白这个打桩是什么意思2018-11-285
- aebn谢谢老师分享,努力学习中^_^2018-11-282
- 路人这节老师讲得特别好,特别是问题的衍生能思考到很多go的其他重要模块,比如net、io等。2019-07-141
- 新世界讲的很不错,把http常用的参数注意事项都讲了一遍,这一块是通用技能,无论哪种语言,发送http请求都会有这些参数,很不错2022-05-25