Language agnostic 设计一个网络应用程序

Language agnostic 设计一个网络应用程序,language-agnostic,networking,Language Agnostic,Networking,问题: 我需要设计一个网络应用程序,可以处理网络故障,并在出现故障时切换到另一个网络 假设我使用三个以太网连接和一个无线连接。在特定时刻,仅使用一个连接 我应该如何设计我的系统,以便在出现故障时可以切换到另一个网络 我知道这是一个非常宽泛的问题,但任何指点都会有帮助 为此创建一个域模型,描述网络元素、您希望能够检测和处理的故障类型,并演示其工作原理。然后插入网络代码。对连接进行一次类轮询。如果轮询超时触发,则切换以太网设置。对于无线,将wifi设置设置为“自动连接”,然后仅启用/禁用wifica

问题:

我需要设计一个网络应用程序,可以处理网络故障,并在出现故障时切换到另一个网络

假设我使用三个以太网连接和一个无线连接。在特定时刻,仅使用一个连接

我应该如何设计我的系统,以便在出现故障时可以切换到另一个网络


我知道这是一个非常宽泛的问题,但任何指点都会有帮助

为此创建一个域模型,描述网络元素、您希望能够检测和处理的故障类型,并演示其工作原理。然后插入网络代码。

对连接进行一次类轮询。如果轮询超时触发,则切换以太网设置。对于无线,将wifi设置设置为“自动连接”,然后仅启用/禁用wificard


(但我不知道如何切换以太网连接)

我通常会确保网络上有路由,并在主机上运行一个(或多个)路由协议实例。这样,网络故障对应用程序来说(大部分)是透明的,因为主机操作系统负责以正确的方式发送数据包


在开源方面,我对zebra和quagga有很好的经验,至少在linux机器上是这样。

我要做的第一件事是寻找能让我发生网络断开事件的API。 我还想办法检查网络连接的状态

这取决于操作系统和所使用的语言,因此您可能希望在应用程序中对此进行抽象

例如:

RegisterDisconnectionEvent(DisconnectionHandler);

function DisconnectionHandler()
{
   FindActiveNetworkConnection();
   // do something else...
}

这样做的一个基本方法是注意网络断开事件。你的顺序是: 注册/轮询网络连接状态更改。维护所有活动网络连接的列表。 使用第一个可用的网络连接(或者,您可以根据接口带宽对其进行排序,并使用带宽最高的网络连接)。 当检测到断开连接时,请使用下一个活动连接

但是,如果您的应用程序的功能受到影响(基于您使用的网络连接),则最好使用路由协议来完成这项工作,或者在应用程序中使用跟踪应用程序。此跟踪应用程序将跨所有可用接口跟踪网络路径(通过ping、traceroute等各种方法),以查看哪一个可以到达最终目的地,并使用适当的网络接口


此外,您还可以监视网络接口,不仅监视状态更改,还监视输入/输出错误,并相应地更改选择。这将帮助您在任何给定时间点使用最高效的网络。但这需要与切换网络连接所造成的混乱相平衡。

如果您控制所有相关主机,将探测所有连接并自动选择一个有效的连接;如果多个连接正在工作,它将在它们之间实现负载平衡

如果您不控制端点,那么除了在应用程序中进行探测之外别无选择。是一个应用程序的示例,它可以非常优雅地完成这项工作

你没有提到你的申请是做什么的;也许可以重新设计您的协议,使其能够像BitTorrent那样同时使用所有可用的连接,因此不必担心某些链接在任何给定时间中断