ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Socket 和 HTTP,其实是上下级关系

Socket 和 HTTP,其实是上下级关系 一句话说清Socket 是「打电话的功能」。HTTP 是「打电话时说话的规矩」。它们不是二选一。你用 HTTP底下一定在用 Socket。一、先看一个画面想象你要给客服打电话① 拿起电话拨号接通 ← ★ 这是 Socket 干的事 ② 说你好我要查订单 123 ← ★ 这是 HTTP 干的事电话本身不管你说什么。你可以说中文、说英文、甚至唱歌电话都能传过去。但如果双方没有约定好怎么说话就会乱套。HTTP 就是那个约定先说你好我要办什么事请求行再说我是谁、我要什么格式请求头最后说具体内容请求体二、Socket 到底给了你什么就四个动作连接 → 发字节 → 收字节 → 断开注意字节两个字。Socket 不知道你发的是文字、图片还是什么。它就是一根管子你往里倒东西对方接住。三、⭐ Socket 最大的坑它不分段这是最重要的一点看懂这个就够了。你连着发了三句话发送方 你好 在吗 急你以为对方会收到三句。实际可能是情况① 你好在吗急 ← ★ 三句粘成一句 情况② 你好在 吗急 ← ★ 从中间切开了 情况③ 你 好在吗 急 ← ★ 随便切为什么因为 TCP 只保证“你倒进去多少水对方接到多少水”。但你分几次倒的这个信息它不记录。发送方 ──→ [ 一根水管 ] ──→ 接收方 ★ 水都到了一滴不少 ★ 但这是第几杯就不知道了所以你必须自己想办法标记最常用的办法先说长度。发之前先说这条消息有 6 个字节 然后发 你好在吗 对方先读长度 → 知道要读 6 个 → 精确读 6 个 → ✅ 一条完整消息HTTP 也是这么干的Content-Length: 27 ← ★ 先告诉你正文有 27 字节四、HTTP 帮你省了什么如果你只用 Socket下面这些全部要自己写事情自己写 Socket用 HTTP一条消息到哪结束⭐ 自己设计✅ 自带这次回的是哪个请求⭐ 自己编号配对✅ 自带出错了怎么表示⭐ 自己定义错误码✅ 404、500数据是什么格式⭐ 自己约定✅ Content-Type要不要压缩⭐ 自己做✅ 自动协商断线了怎么办⭐ 自己重连✅ 库帮你做还有一个最容易被忽略的★ 全世界的工具都懂 HTTP Postman 能测 Charles 能抓包 Nginx 能转发 CDN 能缓存 ★ 你自己发明的协议这些一个都用不了五、HTTPS 又是什么就是 HTTP 外面套了一层保护膜。HTTP 明信片 ← 快递员能看到内容 HTTPS 密封信封 ← 只有收件人能拆这层膜叫 TLS做三件事① 加密 ★ 别人看不懂 ② 防篡改 ★ 中途被改了能发现 ③ 验身份 ★ 确认对面真的是淘宝不是假冒的第三点最容易被忽略。光加密没用——骗子也可以跟你建立加密连接。证书就是用来证明我真的是淘宝的身份证。六、什么时候用哪个【绝大多数情况】用 HTTP 写接口、App 后端、对接第三方 → ★ 别折腾HTTP 够用而且省事 【需要服务器主动推消息】用 WebSocket 聊天、通知、实时数据 → ★ 它是能过防火墙的 Socket最佳折中 【实在受不了 HTTP 的开销】才用原始 Socket 游戏每秒几十条同步、股票行情 → ★ HTTP 一个请求几百字节自定义协议只要十几字节七、一个对比感受一下查一个用户信息【HTTP】发出去的内容 GET /api/user/123 HTTP/1.1 Host: api.example.com User-Agent: Mozilla/5.0 ... Accept: application/json Authorization: Bearer eyJhbGc... 还有好几行 ★ 大约 500 字节 【自定义 Socket 协议】 [长度4字节][命令号2字节][用户ID 4字节] ★ 10 字节差 50 倍。但代价是那 500 字节里的每一个信息自定义协议都得你自己想办法表达。而且没有任何现成工具能看懂你的 10 个字节。八、三个常见误解误解真相“Socket 是长连接HTTP 是短连接”❌ HTTP 默认就是长连接“Socket 比 HTTP 快”❌ 底层都是 TCP快的是包更小“Socket 和 HTTP 二选一”❌ ⭐HTTP 就是跑在 Socket 上的记住这三句就行一、HTTP 是跑在 Socket 上面的不是并列的东西。二、Socket 只给你字节流一条消息从哪到哪要你自己定。三、99% 的场景用 HTTP需要推送用 WebSocket实在嫌慢才用裸 Socket。最后一句很多人自己写 Socket 协议写着写着会加上消息长度“消息类型”“请求编号”“错误码”……★ 等全加完你会发现自己造了一个难用版的 HTTP。
返回列表