请教一下大家,net模块中如何接收长数据?
发布于 4 年前 作者 wldlzt 4389 次预览 最后一次回复是 4 年前 来自 问答
tcp_client.on(‘data’,function(data){ console.log(data.toString()); var test = JSON.parse(data.toString()); }) tcp_client.on(‘end’,function(){ console.log(‘data end!’); }) 目前出现一个情况是data中接收的数据量如果少一些,那立即JSON.parse是没问题的,数据量多就会出现接收不完整,本想着设置一个全局变量累积data的接收再到end里JSON.parse,但也不行,麻烦有了解的朋友指点一二,这个跟Http的接收似乎有很大不同
9 回复
如果整个传输过程只有一段 JSON 数据,只是因为内容太长被分包发送的话,可以这样:
如果是传输过程中可能连续接收多段JSON,发送每一段 JSON 数据前需要有几个字节表示后面要接收数据的长度,这个会比较复杂一些:
@leizongmin 马上来试一下~~~谢谢谢谢
@leizongmin 还是不行,tcp_client.on(“end”, () 并未触发
TCP是流式协议。数据没有边界的,你需要定义一个应用层协议。比如https://github.com/theanarkh/tiny-fsm
@theanarkh 原来如此…我先看看这个怎么用
建议用websocket,websocket协议本身就解决了TCP粘包拆包的问题,可以单独起websocket服务,也可以与http服务器集成在一起
参考这个 https://www.cnblogs.com/alwu007/p/5395035.html#3802625
发送方先发个 数据长度的数字, 然后再发JSON字符串
接收方自然就知道目前有没有接收完成了
同意6楼 。直接 WebSocket 最简便了。