我在与 node.js 0.6.18> 和 0.8.0 的 UDP 连接上观察到大量数据丢失。它以每秒约 1200 个数据包的高数据包速率出现,帧数限制为约 1500 字节。每个数据包都有一个递增的数字,因此很容易跟踪丢失的包的数量。
var server = dgram.createSocket("udp4");
server.on("message", function (message, rinfo) {
//~processData(message);
//~ writeData(message, null, 5000);
}).bind(10001);
在接收回调中,我测试了两个案例,我首先将 5000 个包保存在一个文件中。结果没有丢包。在我包含了一个数据处理例程并获得了大约 50% 的丢弃率之后。我所期望的是流程数据例程应该是完全异步的,并且不应该给系统引入死时间,因为它是一个简单的解析器来处理包中的二进制数据并将事件发送到进一步的处理例程。
似乎解析例程引入了死区时间,其中事件处理程序无法处理每个数据包。
在低包裹率(< 1200 包裹/秒)下,没有观察到数据丢失!这是一个错误还是我做错了什么?