我正在寻找一种方法,使两个程序能够高效地在Linux和Windows系统中传输大量数据。这是一个P2P网络程序的背景,该程序作为网络上的节点持续运行,并且其他应用程序(可能是游戏,因此需要快速的解决方案)将使用它来与网络中的其他节点通信。如果有更好的解决方案,我会很感兴趣。
我正在寻找一种方法,使两个程序能够高效地在Linux和Windows系统中传输大量数据。这是一个P2P网络程序的背景,该程序作为网络上的节点持续运行,并且其他应用程序(可能是游戏,因此需要快速的解决方案)将使用它来与网络中的其他节点通信。如果有更好的解决方案,我会很感兴趣。
boost::asio是一个跨平台库,用于处理套接字上的异步 io。你可以结合使用Google Protocol Buffers(一种实际消息格式)。
此外,Boost 还提供了boost::interprocess,用于在同一台机器上进行进程间通信,但是 asio 让您可以异步进行通信,并且可以轻松地为本地和远程连接使用相同的处理程序。
我一直在使用ZeroC的ICE (www.zeroc.com),它非常棒。非常易于使用,不仅跨平台,而且还支持许多语言(如python、java等),甚至还有嵌入式版本的库。
这是一个难题。
瓶颈在于互联网,以及您的客户可能在NAT后面。
如果您不谈论互联网,或者明确没有客户在运营商级别的恶意NAT后面,您需要说明。
因为问题归结为:使用TCP。接受它。
虽然其他答案涵盖了部分问题(套接字库),但它们没有告诉您NAT问题。与其让用户调整其路由器,不如使用一些技术,这些技术应该可以在没有额外配置的情况下通过一个模糊的健全路由器。您需要使用所有这些技术以获得最佳兼容性。
首先,ICE library here 是一种NAT穿透技术,可与网络中的STUN和/或TURN服务器一起使用。为使其正常工作,您可能需要提供一些基础设施,尽管有一些公共STUN服务器可用。
其次,同时使用UPnP和NAT-PMP。例如,一个库here。
第三,使用IPv6。Teredo是一种在IPv4上运行IPv6的方式,通常在以上方法均无法解决时起作用,而且谁知道,您的用户可能已经通过其他方式拥有了工作的IPv6。实现此功能所需的代码非常少,并且越来越重要。例如,我发现大约一半的Bittorrent数据通过IPv6到达。