Node.js 将dgram(UDP)与Socket.IO一起使用时,数据报的发送速度是多少?(节点)

Node.js 将dgram(UDP)与Socket.IO一起使用时,数据报的发送速度是多少?(节点),node.js,websocket,udp,socket.io,Node.js,Websocket,Udp,Socket.io,我使用socket.io和dgram节点库通过节点将UDP消息从一个程序发送到浏览器 代码看起来就像socket.io示例 var dgram = require("dgram"); var dServer = dgram.createSocket("udp4"); dServer.bind(12345, '0.0.0.0'); var io = require('socket.io').listen(80); io.sockets.on('connection', function (sock

我使用socket.io和dgram节点库通过节点将UDP消息从一个程序发送到浏览器
代码看起来就像socket.io示例

var dgram = require("dgram");
var dServer = dgram.createSocket("udp4");
dServer.bind(12345, '0.0.0.0');
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
  dServer.on("message", function (msg) {
     socket.send('message', msg);
  });
});
我的问题是数据报最终以什么速度发送到浏览器?它们是以TCP速度、web套接字速度(据我所知较慢)还是UDP速度(就实时通信而言,我所知较快)发送的


此外,在本例中,io始终在端口80上侦听(意味着它只能以http/tcp速度接收内容),或者它只是侦听以建立套接字连接,然后可以停止侦听(并让套接字连接接管)

UDP、tcp和WebSockets“数据包”的速度相同(例如,网速),但它们在开销和可靠性方面有所不同

  • WebSocket是现有HTTP连接中的一个隧道,因此实际上TCP具有更大的开销。但是他们使用现有的方式通过NAT路由器和防火墙进行隧道传输
  • TCP具有可靠性保证,例如没有数据包丢失和重复。TCP需要一个初始的三方握手,但这对于一个连接是一次,而不是每个数据块
  • UDP是火和遗忘,如果需要的话,您需要在上面实现您自己的可靠性。除此之外,我不确定浏览器是否会在本地接受您的UDP数据包,至少在RTP上下文之外(例如WebRTC)。它可能与Java和Flash一起工作

因此,假设实际数据以相同的速度发送:在我的示例中,使用node时,数据包实际到达其最终位置的速度比仅使用UDP时慢,因为UDP数据必须通过套接字(http+开销),TCP是否因确认响应而增加了时间?这使得它看起来不太好,dgram接收一个数据报(这需要时间,可能会有数据丢失),然后通过socket.io发送它(这需要更多的时间)?两个数据包大约同时到达目的地,主要是网速。但是,使用UDP时,发送方根本不关心数据包是否到达目的地,而使用TCP时,发送方希望对方确认,如果丢失,则会重新提交数据包。数据包可能会一直丢失:如果链路饱和,数据包就会被丢弃(例如,输入的数据包多于输出的数据包)。在这种情况下,TCP将自动适应(例如,发送更少的数据包),而UDP则不在意,并将继续释放数据包。有线指的是连接?(比如gb/s?)是的,连接的原始速度。路由器、交换机等(通常)在转发数据包时只查看下层(IP),而不关心上层(如UDP和TCP),光纤本身也绝对不关心。