Разработка сетевого приложения - PullRequest
2 голосов
/ 26 марта 2009

Проблема:

Мне нужно спроектировать сетевое приложение, которое может обрабатывать сбои сети и переключаться на другую сеть в случае сбоя.

Предположим, я использую три соединения Ethernet и одно беспроводное соединение. В определенный момент используется только одно соединение.

Как мне спроектировать мою систему, чтобы она могла переключаться на другую сеть в случае сбоя.

Я знаю, что это очень широкий вопрос, но любые указатели помогут!

Ответы [ 6 ]

2 голосов
/ 26 марта 2009

Обычно я проверяю наличие маршрутизации в сети и запускаю один (или более) экземпляров протокола маршрутизации на хосте. Таким образом, сбой сети (в основном) прозрачен для приложения, поскольку хост-операционная система заботится о правильной отправке пакетов.

Что касается открытого кода, у меня есть хороший опыт работы с зеброй и кваггой, по крайней мере на машинах с Linux.

1 голос
/ 30 марта 2009

Примитивный способ сделать это - следить за событиями отключения сети. Ваша последовательность будет: Регистрация / опрос для изменений состояния сетевых подключений. Поддерживать список всех активных сетевых подключений. Используйте первое доступное сетевое соединение (в качестве альтернативы вы можете отсортировать его по пропускной способности интерфейса и использовать соединение с самой высокой пропускной способностью). При обнаружении сбоя соединения используйте следующее активное соединение.

Однако, если есть какие-то последствия для функциональности вашего приложения, в зависимости от того, какое сетевое соединение вы используете, вам будет гораздо лучше, если за вас будет работать протокол маршрутизации или приложение для отслеживания в вашем приложении. Это приложение отслеживания будет отслеживать сетевые пути (с помощью различных методов, таких как ping, traceroute и т. Д.) Через все доступные интерфейсы, чтобы определить, какой из них может достичь конечного пункта назначения, и использовать соответствующий сетевой интерфейс.

Кроме того, вы можете отслеживать свои сетевые интерфейсы не только на предмет изменения статуса, но и на наличие ошибок ввода / вывода, и соответственно изменять свой выбор. Это поможет вам использовать наиболее эффективную сеть в любой момент времени. Но это должно быть сбалансировано с оттоком, вызванным переключением сетевого подключения.

1 голос
/ 26 марта 2009

Первое, что я хотел бы сделать, - это найти API, которые дадут мне события отключения сети. Я также нашел бы способ проверить состояние сетевых подключений.

Они будут различаться в зависимости от операционной системы и используемого языка, поэтому вы можете захотеть, чтобы это абстрагировалось в вашем приложении.

Пример:

RegisterDisconnectionEvent(DisconnectionHandler);

function DisconnectionHandler()
{
   FindActiveNetworkConnection();
   // do something else...
}
1 голос
/ 26 марта 2009

есть один класс опроса для соединения. Если срабатывает тайм-аут опроса, переключите настройки Ethernet. Для беспроводного соединения, установите настройки Wi-Fi для автоматического подключения, а затем просто включите / отключите Wi-Fi.

(но я не знаю, как вы переключаете соединение Ethernet)

1 голос
/ 26 марта 2009

Создайте модель домена для этого, описав элементы сети, виды сбоев, которые вы хотите иметь возможность обнаруживать и обрабатывать, и демонстрируйте, как это работает. Затем подключите сетевой код.

0 голосов
/ 10 октября 2014

Если вы контролируете все задействованные хосты, Multipath TCP проверит все ваши соединения и автоматически выберет то, которое работает; если работает несколько соединений, баланс между ними будет загружен.

Если вы не контролируете конечные точки, у вас нет выбора, кроме как выполнить проверку в приложении. Mosh - пример приложения, которое делает это довольно элегантно.

Вы не упомянули, что делает ваше приложение; возможно, было бы возможно изменить дизайн вашего протокола так, чтобы он использовал все доступные соединения одновременно, как это делает BitTorrent, и, следовательно, не заботится о том, что некоторые ссылки не работают в любой момент времени?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...