2

我用 Python/Twisted 编写了一个音频广播服务器。它工作正常,但内存使用量增长太快!我认为这是因为某些用户的网络可能不够好,无法及时下载音频。

我的音频服务器将音频数据广播到不同听众的客户端,如果其中一些不能及时下载音频,这意味着我的服务器会保留音频数据,直到听众收到为止。更重要的是,我的音频服务器是一个广播服务器,它接收音频数据,并将它们发送到不同的客户端,我虽然 Twisted 将这些数据复制到不同的缓冲区,即使它们是相同的音频片段。

我想减少内存使用的使用,所以我需要知道客户端何时接收到音频,以便我可以决定何时丢弃一些慢客户端。但我不知道如何使用 Twisted 实现这一目标。有人知道吗?

我还能做些什么来减少内存使用量?

谢谢。维克多·林。

4

2 回答 2

2

你没有说,但我会假设你正在使用 TCP。由于客户端无法像您尝试发送数据一样快地接收数据,因此很难编写一个内存不断增加的基于 UDP 的系统。

TCP 具有内置的流量控制功能。如果接收方无法以您希望发送的速度读取数据,则此信息将提供给您,您可以更慢地发送。这与 BSD 套接字 API 一起工作的方式是 send(2) 调用将阻塞或返回 0 以指示它不能向发送缓冲区添加任何字节。它在 Twisted 中的工作方式是通过一个称为“生产者和消费者”的系统。该系统的要点是您向消费者注册生产者。生产者对消费者反复调用 write。当消费者跟不上时,它会调用pauseProducing生产者。当消费者再次准备好接收更多数据时,它会调用resumeProducing生产者。

您可以在Twisted 文档的一部分生产者/消费者指南中更详细地了解该系统。

于 2009-11-10T02:50:28.923 回答
-5

确保您使用的是 Python 的垃圾收集器,然后检查并删除您不使用的变量。

于 2009-11-09T02:38:36.380 回答