Javascript 从Node.js UDP发送大量小数据包不';I don’我不能把他们都送去
我有一个项目,我正在工作,需要发送一个小的9字节的数据包到7000个不同的主机以外的本地网络,然后它等待他们的回复回到同一个端口,并处理响应 我遇到的问题是Node.js dgram(udp4)似乎没有发送所有数据包。我没有以任何方式限制利率,因此可能存在问题 我正在循环,创建数据包,然后使用.send()直接触发它们。当Wireshark打开时,我可以看到在7000个被“发送”的人中,只有约1300个似乎撞到了电线并离开了 脚本本身报告所有数据包已发送,没有错误,Wireshark显示不同的结果,另一端的主机反映Wireshark所说的,他们没有收到数据包。我使用下面的代码来发送和验证,数据包是一个缓冲区Javascript 从Node.js UDP发送大量小数据包不';I don’我不能把他们都送去,javascript,node.js,sockets,networking,udp,Javascript,Node.js,Sockets,Networking,Udp,我有一个项目,我正在工作,需要发送一个小的9字节的数据包到7000个不同的主机以外的本地网络,然后它等待他们的回复回到同一个端口,并处理响应 我遇到的问题是Node.js dgram(udp4)似乎没有发送所有数据包。我没有以任何方式限制利率,因此可能存在问题 我正在循环,创建数据包,然后使用.send()直接触发它们。当Wireshark打开时,我可以看到在7000个被“发送”的人中,只有约1300个似乎撞到了电线并离开了 脚本本身报告所有数据包已发送,没有错误,Wireshark显示不同的结
udpServer.send(packet, 0, packet.length, port, address, function(error) {
if (!error) {
successes++;
console.log(successes + "/" + total);
} else {
console.log(error);
}
});
关于我在这里做错了什么,或者忽略了什么,你有什么想法吗?在很多情况下,你的数据包可能会被丢弃:
/sys/class/net/eth0/statistics/
,并查看是否有丢弃计数器在递增ethtool-S eth0
,查看是否有丢弃计数器递增您的数据包可能会在许多关口被丢弃:
/sys/class/net/eth0/statistics/
,并查看是否有丢弃计数器在递增ethtool-S eth0
,查看是否有丢弃计数器递增我想它丢失了其余的数据包,也许你可以在这里找到一个解决方案:@C0dekid.php我已经看过了。这似乎主要围绕着接收端而不是发送端。除了在Unix上运行之外,它也没有任何建议。我尝试过不同的平台,结果都是一样的。谢谢你的链接,不幸的是还没有修复。有趣的一个。您是否尝试过发送普通字符串而不是缓冲区,以确保这不是问题所在?(不应该是这样,只是以防万一)我在chromium window中遇到了类似的情况。OnForeUnload之前,我需要在循环中向客户端发送一些udp,以通知关闭的客户端数量。使用在应用程序启动时创建的共享套接字发送命令非常不可靠。回调函数从未被命中,没有抛出错误。似乎套接字从未将数据从其内部缓冲区刷新到网络。我尝试了几种方法,比如延迟和计数器等待来自循环的每次回调。什么都没用。最后,我需要为每个循环迭代和发送创建一个新套接字。这使它起了作用。非常奇怪…我想它丢失了其余的数据包,也许你可以在这里找到解决方案:@C0dekid.php我已经看过了。这似乎主要围绕着接收端而不是发送端。除了在Unix上运行之外,它也没有任何建议。我尝试过不同的平台,结果都是一样的。谢谢你的链接,不幸的是还没有修复。有趣的一个。您是否尝试过发送普通字符串而不是缓冲区,以确保这不是问题所在?(不应该是这样,只是以防万一)我在chromium window中遇到了类似的情况。OnForeUnload之前,我需要在循环中向客户端发送一些udp,以通知关闭的客户端数量。使用在应用程序启动时创建的共享套接字发送命令非常不可靠。回调函数从未被命中,没有抛出错误。似乎套接字从未将数据从其内部缓冲区刷新到网络。我尝试了几种方法,比如延迟和计数器等待来自循环的每次回调。什么都没用。最后,我需要为每个循环迭代和发送创建一个新套接字。这使它起了作用。很奇怪…谢谢这个答案,很多优秀的点子要考虑。我看了第1、2和3项,没有一项显示出任何问题的迹象。除此之外,我没有看其他内容,因为Wireshark没有显示这些数据包已经离开,所以在机器之外进行检查是没有意义的?不幸的是,我还没有解决这个问题。不过,我真的很感谢您的回复。还有一个损失层,您计算过node产生的系统调用了吗?它是否与您期望它发送的内容匹配?可能节点正在放弃或溢出某些内部数据结构。所有sendmsg都已计算在内。在我刚刚做的测试中,我看到了7558的日志记录,strace报告了7558,但Wireshark只看到了其中的1267个。长期延迟的响应,但可能会在