nodejs 有没有好用的解决粘包问题的库?

2020 年 10 月 12 日
 cl903254852
9411 次点击
所在节点    Node.js
58 条回复
temporary
2020 年 10 月 12 日
粘包是什么
Mohanson
2020 年 10 月 12 日
喂,110 吗
LANB0
2020 年 10 月 12 日
粘包是什么?
基于 TCP 的应用层协议数据,处理方法只有 2 种:
1 、逐字节从 socket 读取数据,匹配起始标识和头信息,根据头信息中的数据段长度继续读取指定长度的数据段
2 、socket 收的数据全部丢入循环缓冲区,同时运行指定的分包线程从缓冲区分包取数据包处理
mxT52CRuqR6o5
2020 年 10 月 12 日
别用 tcp,用些上层协议(比如 websocket),解决方案也无非是自己再实现一套类似 websocket 的上层协议
stephenxiaxy
2020 年 10 月 12 日
自己根据自定义协议处理
no1xsyzy
2020 年 10 月 12 日
Cops In Action
nxforce
2020 年 10 月 12 日
tcp 是流吧。。。粘包是个什么鬼。。。

在 tcp 流里读取数据,一定会有边界的概念的,我们一般在流里的前几个字节存放后面的 data 的长度,再根据这个长度获取数据流的 data 啊。
nutting
2020 年 10 月 12 日
狗头伸出来
dallaslu
2020 年 10 月 12 日
他来了他来了,他带着两个粘在一起的包来了
GM
2020 年 10 月 12 日
@joyhub2140
大部分是初学者不理解 stream 这个概念,总以为发送方 send 了一次,接收方 read 一次就能读到完整内容(恰恰好完整,不多也不少),结果实际发现 read 出来的内容有时候多、有时候少、又有时候刚刚好相同,百思不得其解,最后有人对这种现象造出一个词:“粘包”。
noe132
2020 年 10 月 12 日
这得看你想处理粘(nian)包还是粘(zhan)包
cl903254852
2020 年 10 月 12 日
@noe132 是粘包(手动狗头)
cl903254852
2020 年 10 月 12 日
@GM 正解
wysnylc
2020 年 10 月 12 日
大胆,何人在此粘包!
cl903254852
2020 年 10 月 12 日
@stephenxiaxy 想偷个懒 找个第三方插件用用
cl903254852
2020 年 10 月 12 日
livepps
2020 年 10 月 12 日
手写也是分分钟吧,消息头加上长度。
超过长度的数据切割出消息,末尾多的数据缓存等待新数据。
不够长度的直接缓存等待新数据。
opengps
2020 年 10 月 12 日
自己重新封装下 socket 处理吧
reus
2020 年 10 月 12 日
所有能处理流的,都能处理 tcp
例如绝大部分浏览器都自带的 Streams api
https://developer.mozilla.org/en-US/docs/Web/API/Streams_API
菜。
Chenamy2017
2020 年 10 月 12 日
流处理处理,协议定义好,协议头+数据内容。协议头固定长度且包括数据内容长度,然后就是按需从流数据里面取数据就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/714154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX