CNode

socket.on('data', ...)时遇到的问题

Mmikemoto发布于13 年前最后回复13 年前8 回复5264 浏览0 收藏
因为现在要做的是持久连接的socket编程,所以没有办法先在on('data')的时候将chunk连接起来,在on('end')的时候再对所有接收的数据进行操作。
在这种情况下对方可能随时发不同长度的信息过来,而我也要对发来的信息马上做出回应。虽然信息长度不一,但信息头部行有length属性,但是我不知道如何控制on('data')时如何只读取一行或者指定长度的数据,怎么办?
查看回复

回复 (8)

B
brighthas#1·13 年前

you can cut or compose data .


var newData = new Buffer(100);

sock.on("data",function(data){
    // cut or compose `data` to `newData`
});


签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3

M
myy#2·13 年前

这是tcp长连接最基本的知识呀。。。on('data') 中只管接受数据,长度不满就一直收并拼接,长度满了就处理(如果有多出来剩余的部分留住继续拼)

buffer的拼接可以用内置的 Buffer.concat(list, [totalLength]) 方法

M
mikemoto#3·13 年前
引用 myy这是tcp长连接最基本的知识呀。。。on('data') 中只管接受数据,长度不满就一直收并拼接,长度满了就处理(如果有多出来剩余的部分留住继续拼) buffer的拼接可以用内置的 Buffe...

我擦,那样子node处理起来不就很麻烦?length属性不知道放在buffer哪里,没有readline之类的函数,我不能够先找length属性进行精确读取操作啊。。split之类的函数可能会把多余的数据也分离了,最后还得把数据重新拼接起来。。

S
showen#5·13 年前

我遇到和lz一样的问题,嫌麻烦就用了ws

J
JacksonTian#7·13 年前

整个应用层协议吧,比如websocket。

参与回复
登录后即可参与回复。登录