CNode

node.js tcp 粘包,拆包问题

问答
JJerrysShan发布于7 年前最后回复7 年前4 回复7664 浏览0 收藏

最近在学习socket编程,遇到tcp粘包的问题,查了资料,大致看到两种封包思路:

  1. 一种是把body length放在header里面,先解析body length,然后再解析body.
  2. 另外一种是根据特殊字符,如\r\n来切分 看到说的都是这种思路,但是没有查到具体的实现方案,有谁能具体的例子学习一下吗?
查看回复

回复 (4)

W
waitingsong#1·7 年前

粘包的术语是生造出来不正确的。 实际场景是需要你自行定义(设计)数据流解析方式(比如用 \r\n 作终止符)

H
HobaiRiku#2·7 年前

楼上说得非常到位,数据流协议和处理必须自己根据需求制定,没有协议的数据流是不科学的。推荐看看变形流stream.Transform 类,比如zlib,crypto包。你需要的不是on('data', data =>{}),而是on('frame',frame =>{})。根据\r\n分割,可以了解readline

L
lvgithub#4·7 年前
参与回复
登录后即可参与回复。登录