大家好,我是老陈。干了这么多年后端,见过太多因为连接策略没选好,导致大促当天服务器直接宕机的惨案了。今天咱们不聊虚的,直接聊聊 TCP 长连接和短连接到底该怎么选,尤其是在高并发场景下,这玩意儿选错了,真的会要命。
很多人觉得长连接一定比短连接好,这其实是个误区。短连接就像每次打电话都要重新拨号,握手、传输、挥手,完事儿挂断。适合那种请求少、处理快的场景,比如传统的 HTTP 网页浏览。
而长连接则是拨通一次后,一直保持着,随时能说话。这在需要频繁交互的场景,比如即时通讯、游戏同步里是标配。但你知道吗?维持连接是要消耗资源的。每个连接都占用文件描述符和内存,一旦并发量上来,服务器内存可能瞬间被吃光。
根据我的经验,如果 QPS 低于 1000,短连接完全够用,维护成本低;但要是像直播间那种海量心跳,长连接才是王道。
并不是所有场景长连接都是万能药。我见过一个案例,团队为了追求高性能,全链路用了长连接,结果 Nginx 反向代理成了瓶颈。这里有个关键配置,很多人容易忽略:

upstream backend { server 127.0.0.1:8080; keepalive 32; # 关键:连接池大小 }
这个 keepalive 参数不是越大越好。设大了,后端服务压力山大;设小了,起不到复用效果。一般建议根据后端实例数动态调整,比如每个实例保留 10-20 个连接就够了。
另外,在高并发营销场景下,除了连接优化,流量入口的管理也很重要。比如有些团队会使用类似趣码短链接这样的工具来分担追踪压力,把重定向逻辑外置,这样主服务就能更专注于业务逻辑处理,避免因为统计逻辑拖垮连接池。这其实也是一种“分流”思路,和连接复用异曲同工。
keepalive_timeout 65;,避免连接占用过久。worker_connections 限制单进程并发,防止资源耗尽。ulimit -n 检查系统限制,确保足够支撑预期并发。长连接最怕什么?怕断。网络波动是常态,所以自动重连策略必须得做。但千万别一断了就立马重连,那样会产生“惊群效应”,直接把服务器打挂。
最佳实践是采用指数退避算法。
在物联网(IoT)设备场景下,这点尤为重要。设备通常网络不稳定,且数量巨大。我们之前做过一个智能硬件项目,设备端通过 TCP 长连接上报数据。一开始没做心跳检测,很多设备“假死”,服务器还以为在线。后来加了心跳包,每 60 秒一次,超时 3 次未响应则主动断开,稳定性提升了 90%。
这种机制其实和消息推送很像。比如在处理趣码微信卡片消息送达时,也需要维护稳定的通道,确保消息不丢失。如果连接状态判断不准,用户可能收不到关键通知,体验大打折扣。
说到底,技术选型没有银弹。
最后啰嗦一句,别盲目追求长连接。先压测,看看你的服务器能扛多少并发文件描述符,再决定怎么配。有时候,简单的架构反而最稳定。希望这些踩坑经验能帮到你,少走点弯路。