想封装一个网络连接,但跑着跑着就崩了
发布于 11 年前 作者 gvforjob 4817 次预览 最后一次回复是 11 年前 来自 问答
各位大神们,我想这样子封装一个网络连接,但在被拼命发包时进程内存涨到200M左右就崩掉了,是因为闭包的问题,还是Buffer拼接,还是因为一下子收到的数据包太多一次过用for处理,还是其他问题啊~~~ 我是一只小小小小鸟。。。。。。
var net = require('net');
function buildConnection(getPacks, buildPack) {
return function(sock) {
var self = this;
this.buf = new Buffer(0);
sock.on('data', function(data) {
self.buf = Buffer.concat([self.buf, data]);
var packs = getPacks(self);
for (var i = 0; i < packs.length; i++) {
// do something with pack
}
}
}
}
}
var Connection = buildConnection(aGetPacksfunction, aBuildPackfunction);
var server = net.createserver();
server.on('connection', function(sock) {
var conn = new Connection(sock);
});
server.listen(8000);
6 回复
为啥没有错误信息呢?
@fish 控制台也没报错误消息,就是看着内存上到200M突然间就崩了
有2个原因吧:
参考: https://github.com/clowwindy/shadowsocks-nodejs 的readme,作者目前放弃了nodejs版本就是因为内存的问题
我很好奇,这样不是每次都在self.buf后append data,self.buf不是会越来越大吗? 除非处理完pack后,重置了self.buf。 但这样tcp上的粘包没办法处理。
这是我的demo:
楼主,将代码用 markdown 语法标记一下
200M就跳票,好像还是比较奇怪的,还没到buffer上限