node.js - Socket.io 延迟问题

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

我创建了对讲机/对讲机,用户可以在其中朝一个方向进行通信。音频字节是实时广播的。

我面临网络延迟的问题。在本地网络中它工作正常,但在实时网络中它会出现故障。

以下是相关信息。请提出优化延迟的正确方法。

以下是广播字节的代码:

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

Samples rate per second : 44100 Hz

Buffer size: 1024

在移动端我有以下速度:

0.49 Mbps Download

0.88 Mbps Upload

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

enter image description here

最佳答案

网络延迟是您无法影响的(除非您更改 ISP)。但是应用程序延迟掌握在您的手中(意味着您的应用程序编码/解码声音数据的速度)。

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

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

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

  • 说到不可避免的损失,您可以考虑压缩音频而不损失质量(无损)。示例格式有:FLAC、ALAC 和 WAV。有损(有质量损失)格式(例如 MP3)的性能甚至要好 10-100 倍,质量损失通常几乎不明显,这可能是一个可行的选择(想一想,您是否注意到 MP3 上有任何质量损失?)

  • 最后,总体了解一下其他流行的系统和服务(例如 Skype、Discord、Slack 或 Spotify)如何解决您的问题,也许可以考虑应用它们所采用的一些已知技术。

关于node.js - Socket.io 延迟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253768/

相关文章:

node.js - Node : Cannot find module common

php - 如何在 PHP 中使用 nginx?

git - 将 git 存储库添加到 docker 镜像(工作流最佳实践)

javascript - 仅接受 socket.io 中客户端发出的第一个事件并丢弃重复事件

javascript - Node.js 更改应用程序以使用集群模块

javascript - mockserver-grunt 错误产生 java ENOENT

javascript - 忽略 SailsJS 中 1 个特定模型的默认模型属性

javascript - 在子模块nodejs中设置父类的属性

Nginx 失败 (13 : Permission denied) when start rails with unicorn

mysql - Socket.io 和 MySQL 连接