Socket.io延迟问题

时间:2017-09-16 12:11:57

标签: node.js nginx socket.io network-programming

我创建了walkies / talkies,用户可以在一个方向上进行通信。音频字节是实时广播的。

我正面临网络延迟问题。在本地网络中它工作正常,但在现场网络上它会下降。

以下是与之相关的信息。请建议优化延迟的正确方法。

以下是广泛投射字节的代码:

socket.on('talk', function (data) {
    io.emit('listen', data);  
});
  

每秒采样率:44100 Hz

     

缓冲区大小:1024

在移动端,我有以下速度:

  

0.49 Mbps下载

     

0.88 Mbps上传

我的网速如下,这是服务器,我在那里托管了我的socket.io nodejs服务,我从那里连接外部网络的套接字:

enter image description here

1 个答案:

答案 0 :(得分:0)

网络延迟是您无法影响的(除非您更改了ISP)。但是应用程序延迟掌握在您的手中(这意味着您的应用对声音数据进行编码/解码所需的时间)。

  • 您提到44100Hz的采样率,对于语音来说似乎太高了。减少它还会减少您发送的数据量。

  • 增加缓冲区大小(缓存)是另一种选择,因此您的应用程序每个周期可以处理更长的数据块。 会增加延迟,但会提供整体上更稳定的通信

  • 您可以考虑从TCP切换到UDP传输层协议,消除ACK数据包,从而提高吞吐量。如果您打算将您的应用程序用作实时语音通信工具,则会丢失某些语音数据包(与传统电路相比,数据包交换网络的不可避免的部分是互联网),交换的座机网络),并且在会话继续进行之后重新捕获它们没有用

  • 谈到不可避免的损失,您可以考虑压缩音频而不会损失质量(无损)。示例格式为:FLAC,ALAC和WAV。有损(有质量损失)格式(例如MP3)的性能甚至提高了10到100倍,而且质量损失通常很少注意到, 可能是一个可行的选择(考虑一下,您是否曾经注意到MP3上的任何质量下降了?)

  • 最后,总体上检查一下其他流行的系统和服务(例如Skype,Discord,Slack或Spotify)如何解决您的问题,并可能考虑应用它们应用的一些已知技术。