外观
TCP、HTTP 与长连接
- 状态:未准备
- 适用方向:前端 / Go 全栈 / Go 后端
- 最近复习:待填写
- 下次复习:待安排
一句话回答
TCP 提供有序可靠字节流,HTTP 规定请求响应语义;WebSocket、SSE 和 HTTP 连接复用解决不同通信需求,连接建立不等于业务一定成功。
原理解释
TCP 三次握手确认双方收发能力并同步序列号,挥手关闭两个方向,实际报文数可因合并等变化。TIME_WAIT 用于处理迟到报文与最后确认重传,不应为了减少数量就盲目修改系统参数。
TCP 没有应用消息边界,一次 Write 不保证对应一次 Read;应用使用长度、分隔符或成熟协议分帧。流量控制保护接收端,拥塞控制适应网络承载能力。HTTPS 在 HTTP 传输上提供 TLS 保护,证书验证用于认证服务端,不只是“把内容加密”。
HTTP/1.1 通常复用连接;HTTP/2 在一个 TCP 连接内多路复用流,但 TCP 层丢包仍影响该连接上的数据交付。HTTP/3 基于 QUIC,不能把所有 HTTP 都归为 TCP。
WebSocket 建立后双向传消息;SSE 通过 HTTP 响应持续向客户端发送文本事件,适合单向增量。心跳、超时、重连、消息序号和历史补拉共同决定断线恢复体验。
场景与边界
HTTP 方法幂等指多次相同请求的预期效果与一次相同,不保证响应相同;POST 可以通过业务键设计幂等。连接断开或客户端超时并不能判断服务端是否提交,重试须结合语义。HTTP 缓存另见 已有主笔记。
项目中的应用
结合 EinoTalk 聊天讨论 WebSocket 断线补偿;SimulSpeak需要区分 WebSocket 控制信令与 WebRTC 媒体,不能把音频路径讲成普通 HTTP 请求。
常见追问
- TCP 可靠就不会丢业务消息? 只保证连接内传输语义,不保证落库、应用消费或断线补发。
- Keep-Alive 是心跳吗? HTTP 复用、TCP keepalive、应用 ping/pong 是不同层次。
- WebSocket 自动重连恢复历史? 协议不自动提供业务历史恢复,需消息 ID 和补拉设计。