Nodejs创建TCP服务器,不能接收数据
发布于 12 年前 作者 xzyue 10497 次浏览 最后一次编辑是 8 年前

Hi, 我用下面的代码段创建TCP服务器: var net = require(‘net’); var server = net.createServer(function© { //‘connection’ listener console.log(‘server connected’);

c.on(‘data’, function(data) { console.log("raw data: "+data.toString()); buffer += data.toString(); buffer = parsePacket(buffer); }); c.on(‘end’, function() { console.log(‘server disconnected’); }); }); 运行一段时间后就不能接收数据了,我用Wireshark抓包,发现是TCP的接收窗口满了,出现ZeroWindow错误,所以不能接收数据了。 这个是用Wireshark抓包的截图 后来发现用Nodejs写的TCP客户端连接这个服务器收发数据没有这个问题,用C++和Java写的客户端给这个服务器发送数据一段时间后就出现零窗口问题。 不知道有没有哪位遇到过? 谢谢! xzYue

8 回复

没有人遇到这个问题?

node 和 c++/java 发送的请求具体怎么做的呢

啊,表示关注,正要做类似的东西。我需要用vc++产生图像数据,然后通过TCP流发送出去。再用nodejs的服务器端接收TCP流,并通过socket.io转发推送到前端的canvas显示。不知道能够实现否?

@andy24boyking 基本上都是这么实现的。但现在Nodejs作为TCP服务器有这个问题,可能是Nodejs的bug。

我用node做TCP服务器已经有很长一段时间了,但是从来没有出现过你这种问题。

初步考虑的可能是,你在parsePacket之中消耗的时间太多了,由于node的单线程,底层接收到的更多数据包只能缓存等待,如果数据量比较大,数据流入速度比parsePacket要快,那么就可能出现你这种问题(只是猜测)

那为什么用nodejs写没问题…

怎么木有看到listen函数……

回到顶部