gpt4 book ai didi

c++ - 与多个进程共享连接和数据的最快方法?

转载 作者:太空狗 更新时间:2023-10-29 20:49:09 27 4
gpt4 key购买 nike

我有多个应用程序进程,每个进程都连接到服务器并从它们接收数据。通常连接到的服务器和正在检索的数据在进程之间重叠。因此,网络上存在大量不必要的数据重复、不必要的连接(这对服务器造成负担),并且数据最终会冗余地存储在应用程序的内存中。

一种解决方案是将多个应用进程合并为一个进程——但在大多数情况下,它们在逻辑上确实是不同的,这可能需要多年的工作。

不幸的是,延迟非常重要,数据量巨大(任何一个数据可能不会太大,但是一旦客户端发出请求,服务器将随着数据的变化发送快速更新流,这可以超过 20MB/s,并且这些都需要以尽可能短的延迟提供给请求的应用程序)。

想到的解决方案是编写一个本地守护进程,应用程序进程将从中请求数据。守护进程将检查是否已经存在到适当服务器的连接,如果不存在则建立连接。然后它将检索数据并使用共享内存(由于延迟问题,否则我会使用套接字)将数据提供给请求应用程序。

在短期内,一个只会解决冗余连接的更简单的想法是使用 unix 域套接字(这将在 unix 操作系统上运行,但我更愿意尽可能坚持使用跨平台库)共享套接字描述符在所有进程之间,因此它们共享一个连接。这个问题是消耗缓冲区——我希望所有进程都能看到套接字上的所有内容,如果我对这种方法的理解正确,那么在套接字上读入一个进程将阻止其他进程在他们的套接字上看到相同的数据下一次读取(共享描述符内的偏移量将增加)。

最佳答案

我建议您看看 ZeroMQ。这可能有助于解决您的问题。我认为 20MB/s 不是很高……您应该能够通过在 ZeroMQ 中使用 TCP 传输来达到该吞吐量水平。还支持其他传输机制,包括使用 OpenPGM 的可靠多播。有计划添加 UNIX 管道作为传输机制。

消息传递可能比共享内存更安全、更容易。值得注意的是,如果您使用消息传递而不是共享内存,那么您可以将您的应用程序组件拆分到一个服务器集群中……这可能会比共享内存提供更好的性能,具体取决于您的瓶颈所在。

关于c++ - 与多个进程共享连接和数据的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1499182/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com