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

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

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

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

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

@mikemoto nodejs本来就是很底层的。。。当然,你可以用现成的 websocket 呀,这个不需要你操心太底层的东西了,推荐 https://github.com/einaros/ws

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

@myy 那如果这样子的话还不如直接用回c、c++??

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

@mikemoto

c/c++要自己管理内存嘛,用nodejs就是图个js脚本编写方便快捷,又不失效率啊。。。

回到顶部