我有多个应用程序进程,每个进程都连接到服务器并从它们接收数据。通常,连接到的服务器和正在检索的数据在进程之间重叠。因此,整个网络中存在大量不必要的数据重复,超出应有的连接数量(这会对服务器造成负担),并且数据最终会冗余地存储在应用程序的内存中。
一种解决方案是将多个应用程序进程组合成一个进程——但在大多数情况下,它们在逻辑上确实是不同的,这可能需要多年的工作。
不幸的是,延迟非常重要,并且数据量很大(任何一个数据都可能不会太大,但是一旦客户端发出请求,服务器就会随着数据的变化发送快速的更新流,这可能超过20MB/s,所有这些都需要以尽可能短的延迟提供给请求的应用程序)。
想到的解决方案是编写一个本地守护进程,应用程序进程将从中请求数据。守护进程将检查是否已经存在与适当服务器的连接,如果不存在则建立连接。然后它会检索数据并使用共享内存(由于延迟问题,否则我会使用套接字)将数据提供给请求的应用程序。
短期内只解决冗余连接的一个更简单的想法是使用 unix 域套接字(这将在 unix 操作系统上运行,尽管我更喜欢在可能的情况下坚持使用跨平台库)在所有进程,因此它们共享一个连接。这样做的问题是消耗缓冲区——我希望所有进程都能看到来自套接字的所有内容,如果我对这种方法的理解正确,则在套接字上的一个进程中读取将阻止其他进程在其上看到相同的数据下一次读取(共享描述符中的偏移量将被碰撞)。