You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go 1.21中EnableFullDuplex()方法的使用及测试结果验证

关于EnableFullDuplex()的测试分析

你的猜测是正确的,出现两个"hello"确实说明服务器在客户端上传大文件的过程中,并发完成了响应写入。

默认情况下,Go的HTTP服务器会先完整读取请求体,之后才会执行响应写入逻辑。但调用rc.EnableFullDuplex()后,打破了这个顺序限制——服务器可以在还没读完请求体的时候就向客户端发送响应数据。

你测试时上传2GB大文件,客户端会分批次发送请求数据。服务器在接收到第一批数据后,就可以执行w.Write([]byte("hello"))发送响应;后续客户端继续发送剩余文件数据时,服务器可能因连接的分帧特性或处理逻辑触发再次输出,最终你看到了两次"hello"。

如果要实现流式反向代理,你可以基于这个特性做以下操作:

  • 启用全双工后,在后台goroutine里持续读取客户端的请求体流
  • 同时把读取到的数据实时转发给目标服务器
  • 再把目标服务器的响应流实时回传给客户端
    这样就能实现请求和响应的双向流式传输,不需要等请求体完全接收完再处理。

内容的提问来源于stack exchange,提问作者jim alef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:22:21